【问题标题】:Django Model AdminDjango 模型管理员
【发布时间】:2021-12-11 15:32:24
【问题描述】:

如何在模型管理中只显示登录用户而不是所有用户?现在用户只能看到自己的数据,但同时在编辑时可以在下拉列表中看到其他用户。 see image

Models.py

user = models.ForeignKey(
    User,db_column="user",null = True, on_delete = models.SET_NULL
)

Admin.py

def get_queryset(self, request):
        qs = super(Museum_ItemAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(user=request.user)

问题是当以“Peter”身份登录时,我可以查看和管理所有用户。问题是我如何只能看到 Peter 而无法看到或更改任何其他用户?

提前非常感谢

【问题讨论】:

  • 您是使用 django-admin 作为前端还是只是 API 响应?
  • 我使用 Django-Admin 作为前端,用户可以登录并查看他们的内容,同时他们只能查看自己的内容。问题是登录用户可以看到并选择其他用户。我需要做的是登录不能选择或查看其他用户。感谢您的帮助。

标签: python django model admin


【解决方案1】:

这是答案,对我有用,感谢您的帮助

 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

def get_queryset(self, request):
   qs = super().get_queryset(request)
   if request.user.is_superuser:
       return qs
        
   return qs.filter(user=request.user)

【讨论】:

    【解决方案2】:

    我希望这会有所帮助:-

    您需要根据您的密钥进行过滤

    admin.py

    class UserAdmin(admin.ModelAdmin):
        # list_display = ('username', 'is_active')
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            if request.user.is_superuser:
                return qs.filter(is_active = True)
            return qs.filter(author=request.user)
    
    admin.site.register(User, UserAdmin)
    

    更多详情: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset

    【讨论】: