如何在不使用 django 中的视图的情况下直接在模型的字段中添加登录用户电子邮件

How to add the logged in user email in a field in the model directly without using a view in django

我的模型中有一个字段,如下所示

uploaded_by = models.CharField(max_length=255, blank=True, null=True, editable=False)

此字段将存储上传数据的用户的用户名(在本例中为电子邮件)。如您所见,这是不可编辑的,因此用户无法编辑它。必须从管理面板输入数据。我想知道是否有任何方法可以用上传数据的登录用户的用户名填写此字段。我知道如果我使用视图我可以做一些事情

uploaded_by = request.user

那么有没有办法直接在模型中做同样的事情,这样我就可以直接使用管理面板来存储用户名,而无需使用视图。

当有人已经创建了库时,为什么要重新创建

您可以使用 django-currentuser 您只需要在 models.py

中执行此操作
from django_currentuser.middleware import (
    get_current_user, get_current_authenticated_user)

# As model field:
from django_currentuser.db.models import CurrentUserField
class Foo(models.Model):
    created_by = CurrentUserField()
    updated_by = CurrentUserField(on_update=True)

此外,不要忘记在 settings.py

中添加中间件
MIDDLEWARE = (
    ...,
    'django_currentuser.middleware.ThreadLocalUserMiddleware',
)

虽然这并不能完全保存用户的电子邮件,但它会保存用户的参考,更好的是,您可以通过 created_by.email

获取所有用户的详细信息

保存方法可以做到这一点

def save(self, *args, **kwargs):
    self.uploaded_by = self.your_user
    return super( your_model , self).save(*args, **kwargs)