【问题标题】:django admin site - display model objects created by request.user onlydjango 管理站点 - 仅显示由 request.user 创建的模型对象
【发布时间】:2015-06-11 09:17:19
【问题描述】:

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

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

【问题讨论】:

    标签: django django-admin django-views


    【解决方案1】:

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

    【讨论】:

    • 如果在模型中定义了相关用户(没有对用户的 FK),有没有办法使用日志条目或其他东西来实现相同的目标?
    • 答案中的链接已损坏。这是 Django 3.1 的 documentation 的更新链接。
    【解决方案2】:

    以防有人懒惰。这是我使用的示例代码。 所以首先你创建一个 QuerySet 管理器,我通常在 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)
    

    希望这对任何人都有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-16
      • 2015-11-19
      • 2022-11-29
      • 1970-01-01
      • 2021-04-03
      • 2015-06-10
      • 2012-09-28
      • 1970-01-01
      相关资源
      最近更新 更多