django admin site - 仅显示request.user创建的模型对象

时间:2015-04-06 21:57:01

标签: django django-admin django-views

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

如果有人偷懒。这是我使用的示例代码。 因此,首先创建一个QuerySet Manager,我通常在models.py中拥有我的名字,它执行以下操作(在本例中,我将其称为模型Blog):

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)

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