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)
希望这对大家有帮助!
我有一个简单的博客应用程序,其中包含 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)
希望这对大家有帮助!