首页 > 解决方案 > Django admin 仅为登录用户保存和显示数据

问题描述

在我的 django 管理项目中,我必须保存然后显示不同用户的数据,我希望当我自动保存字段用户时获取登录的用户值,当我重新登录时,我只能看到为我的用户保存的数据。我有这种models.py:

class TheLinks(models.Model):
    lk_name = models.CharField(max_length=20)

    def __str__(self):
        return self.lk_name

class UserComLinks(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="User")
    l_id = models.ForeignKey(TheLinks, on_delete=models.CASCADE, verbose_name="Portal")
    l_link = models.CharField(max_length=100)

    def __str__(self):
        return str(self.l_id)

现在,如果我运行我的 django 管理员,我会看到以下表单:

在此处输入图像描述

好吧,首先我会隐藏用户名字段并让我的模型使用当前登录的用户自动保存这些数据,然后我会在用户登录时只能看到 hos 数据。我尝试以这种方式管理 admin.py:

管理员.py

class UserComLinksAdmin(admin.ModelAdmin):

list_display = ('l_id',  'l_link')

def changeform_view(self, request, obj_id, form_url, extra_context=None):

        try:
            l_mod = UserComLink.objects.latest('id')
        except Exception:
            l_mod = None

        extra_context = {
            'lmod': l_mod,
        }
        return super(UserComLinksAdmin, self).changeform_view(request, obj_id, form_url, extra_context=extra_context)

但没有任何改变。

有人可以帮我吗?

非常感谢提前

标签: pythondjangodjango-admin

解决方案


您可以从管理表单中排除user字段并在保存之前设置当前用户的值:

class UserComLinksAdmin(admin.ModelAdmin):
    list_display = ('l_id',  'l_link')
    exclude = ('user',)

    def save_form(self, request, form, change):
        obj = super().save_form(request, form, change)
        if not change:
            obj.user = request.user
        return obj

推荐阅读