gpt4 book ai didi

Django:保存模型时填充用户 ID

转载 作者:行者123 更新时间:2023-11-28 19:34:32 32 4
gpt4 key购买 nike

我有一个模型,它有一个链接到标准 Django 用户模型的 created_by 字段。保存模型时,我需要用当前用户的 ID 自动填充它。我不能在管理层执行此操作,因为网站的大部分内容不会使用内置管理。任何人都可以建议我应该如何处理这件事吗?

最佳答案

UPDATE 2020-01-02
⚠ The following answer was never updated to the latest Python and Django versions. Since writing this a few years ago packages have been released to solve this problem. Nowadays I highly recommend using django-crum which implements the same technique but has tests and is updated regularly: https://pypi.org/project/django-crum/

最简单的方法是使用 CurrentUserMiddleware 将当前用户存储在线程本地对象中:

current_user.py
from threading import local

_user = local()

class CurrentUserMiddleware(object):
def process_request(self, request):
_user.value = request.user

def get_current_user():
return _user.value

现在您只需将此中间件添加到您的 MIDDLEWARE_CLASSES 之后身份验证中间件。

设置.py
MIDDLEWARE_CLASSES = (
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
'current_user.CurrentUserMiddleware',
...
)

您的模型现在可以使用 get_current_user 函数来访问用户,而无需传递请求对象。

模型.py
from django.db import models
from current_user import get_current_user

class MyModel(models.Model):
created_by = models.ForeignKey('auth.User', default=get_current_user)

提示:

如果您使用 Django CMS,您甚至不需要定义自己的 CurrentUserMiddleware,而是可以使用 cms.middleware.user.CurrentUserMiddlewarecms.utils.permissions.get_current_user 函数来检索当前用户。

关于Django:保存模型时填充用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/862522/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com