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

时间:2009-10-22 18:49:54

标签: python django django-admin

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

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

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

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

所以基本上总结一下:我可以根据a过滤我的用户列表吗? UserProfile字段?如果没有,我可以添加可访问的自定义视图 从头版开始,无需创建全新的 AdminSite只针对那个?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分: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)

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

admin_objects = UserAdminManager()

我的示例中的某些属性名称可能有误,因为我不知道您的模型设置,但希望您能理解。

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

答案 2 :(得分:0)

在我看来,最快捷,最简单的选择是为您的应用添加新的管理视图,特别是为您的自定义用户模型。有关详细信息,请参阅Django admin docs,但听起来您知道如何使用管理员。

管理页面特定于您的模型后,所有自定义字段将不再是外键。这样可以简化过滤。