使用Django Admin中的UserProfile字段筛选用户列表

jea*_*las 5 python django django-admin

我正在尝试使用UserProfile字段过滤Django中的用户列表...我需要实现一个队列系统,其中新用户被放入队列,直到管理员批准它们.

我只是is_in_queue在我的UserProfile模型中添加了一个布尔字段...但是,当我在Admin区域中显示用户列表时,我意识到你不能使用Model的外键字段过滤列表(在这种情况下,是UserProfile的一个字段) )

显然,list_display项目可以是callables但list_filter不能,所以我可以列出如果用户在队列中没有问题,但是管理员必须滚动整个用户列表以找出队列中哪些是没有意义的...仅过滤队列中的用户(使用userprofile.in_queue)会更加实用......

最后,我考虑将自定义视图添加到我的管理区域,该视图仅列出队列中的用户,但该自定义视图未显示在"管理区域索引"页面上,并且仅为新的过滤组合了一个全新的AdminSite选项似乎有点过头了......

所以基本上总结一下:我可以根据UserProfile字段过滤我的用户列表吗?如果没有,我可以添加一个可从首页访问的自定义视图,而不必仅为此创建一个全新的AdminSite吗?

Der*_*lds 1

您可能想了解如何为admin_objects您的模型使用自定义管理器。

class UserAdminManager(models.AdminManager):
"""
Custom manager for the User model.
"""
def get_query_set(self):
    """
    Overwrites the get_query_set to only return Users in the queue.
    """
    return super(UserAdminManager, self).get_query_set().filter(userprofile__queue=True)
Run Code Online (Sandbox Code Playgroud)

通过覆盖该get_query_set方法,您可以过滤结果。然后只需将其分配给模型admin_objects的属性即可User

admin_objects = UserAdminManager()
Run Code Online (Sandbox Code Playgroud)

我的示例中的一些属性名称可能是错误的,因为我不知道您的模型设置,但希望您明白。

您可以通过查看 django 文档并搜索“自定义管理器”来进一步研究这一点。