【问题标题】:Display results of query in user admin section - django在用户管理部分显示查询结果 - django
【发布时间】:2021-07-31 11:16:21
【问题描述】:
新手问题:
我在 django 管理员中有我的“用户”应用程序,但是有没有办法实现一个只显示具有标准 is_staff = False 或我定义的任何其他标准的用户的部分?
我有点迷茫,因为我觉得没有必要创建一个应用程序,因为我不需要创建一个新表,只需要查询和显示。
例如:
我的查询应该在 users/admin.py 中实现吗?但是如何呈现查询结果呢?
谢谢!
【问题讨论】:
标签:
django
django-models
django-users
【解决方案1】:
您可以在管理类中定义过滤器。然后 Django 会自动创建一个过滤器侧边栏,您可以在其中过滤用户。
@admin.register(User)
class UserAdmin(BaseUserAdmin):
model = User
list_filter = ('is_staff', )
更多信息请查看documentation。
【解决方案2】:
您可以使用User 表上的任何请求覆盖UserAdmin 类中的get_queryset 方法。例如,在您的admin.py:
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
@admin.register(User)
class UserAdmin(BaseUserAdmin):
model = User
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.filter(is_staff=False)
你甚至可以根据当前用户的一些属性来请求数据,比如:
def get_queryset(self, request):
qs = super().get_queryset(request)
if not request.user.is_staff:
return qs.filter(is_staff=False)
return qs