首页 > 解决方案 > 从 django admin 创建对象时如何将当前登录的用户附加到对象

问题描述

我正在开发一个网站,其应用程序的类名为Members,其字段与内置用户类相关,django.contrib.auth.models看起来像

class Members(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    member_image = models.ImageField(upload_to='unknown')
    member_position = models.CharField(max_length=255)
    ...

因此,正如您所看到的,当我添加member_image为用户时,我还必须选择对我没有意义的用户,因为我想检测哪个用户已登录并将他/她的 id 作为默认参数传递,例如

class Members(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, default=request.user.id)

并在管理面板中删除用户字段后

class MembersAdmin(admin.ModelAdmin):
    fields = ('member_image', 'member_position', ...)

这样如果未选择用户字段,它将默认设置登录的 user_id

但要出入requestviews.py不可能的。

那么我将如何实现这一点我也尝试了以下答案

但仍然没有得到它

标签: pythondjangorequest

解决方案


在保存之前修改 MembersAdminsave_model方法并将 request.user 附加到对象。

class MembersAdmin(admin.ModelAdmin):
    fields = ('member_image', 'member_position', ...)
    
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        super().save_model(request, obj, form, change)

推荐阅读