我正在尝试使用UserProfile字段过滤Django中的用户列表...我需要实现一个队列系统,其中新用户被放入队列,直到管理员批准它们。
我只是在我的UserProfile模型中添加了一个is_in_queue
布尔字段...但是,在我的管理区域中显示用户列表时,我意识到您无法使用模型的外键字段过滤列表(在这种情况下,UserProfile的字段)
显然,list_display
项可以是callables而list_filter
不能,所以我可以列出用户在队列中没有问题,但管理员必须滚动整个用户列表,以找出哪些在队列中是没有意义的...只过滤队列中的用户(使用userprofile.in_queue)将更加实用...
最后,我考虑将自定义视图添加到我的管理区域,该视图仅列出队列中的用户,但该自定义视图不会显示在“管理区域索引”页面上,并且仅将一个全新的AdminSite放在一起一个新的过滤选项似乎有点过头......
所以基本上总结一下:我可以根据a过滤我的用户列表吗? UserProfile字段?如果没有,我可以添加可访问的自定义视图 从头版开始,无需创建全新的 AdminSite只针对那个?
答案 0 :(得分:3)
Django 1.3修复了 - list_filter现在允许跨越关系:
https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
答案 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,但听起来您知道如何使用管理员。
管理页面特定于您的模型后,所有自定义字段将不再是外键。这样可以简化过滤。