django 管理站点 - 仅显示 request.user 创建的模型对象

django admin site - display model objects created by request.user only

我有一个简单的博客应用程序,其中包含 author=models.ForeignKey(User, editable=False) 字段。博客文章是从 django 管理站点创建的,我使用 save_model 来获取作者 request.user.

现在我希望该用户 (is_staff) 在浏览模特帖子时只能看到他自己的帖子。但是默认情况下所有的博文都会显示,那么如何隐藏其他用户创建的博文呢?当然,超级用户需要看到所有这些。

覆盖 ModelAdmin 子类的 get_queryset 方法。 documentation 有一个示例,正是您所要求的:仅显示与当前用户相关的对象。

以防有人偷懒。这是我使用的示例代码。 所以首先你创建一个查询集管理器,我通常在 models.py 中有我的,它做这样的事情(在这种情况下我调用模型博客):

class BlogManager(models.Manager):
    def get_queryset(self, request):
        query = Blog.objects.filter(author=request.user)
        if request.user.is_superuser:
            query = UserProfile.objects.all()
        return query

确保你的 admin.py 有这个:

    def get_queryset(self, request):
        queryset = BlogManager.get_queryset(self, request)
        return queryset

所以它可能看起来像:

class BlogAdmin(admin.ModelAdmin):
   #add any other code here

   #Using that queryset manager created before
   def get_queryset(self, request):
        queryset = BlogManager.get_queryset(self, request)
        return queryset
admin.site.register(BlogAdmin)

希望这对大家有帮助!