2009-10-22 71 views
5

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

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

显然,list_display项目可以是可调用的,但list_filter不能,所以我可以列出如果用户在队列中没有问题,但管理员必须滚动浏览整个用户列表来发现哪些队列在队列中是没有意义的......只对队列中的用户进行过滤(使用userprofile.in_queue)会更实用...

最后,我想添加一个自定义视图到我的管理区域,该列表只会列出队列中的用户,但该自定义视图不会显示在管理区域索引页面上,并且只为新建立一个全新的AdminSite过滤选项似乎有点过顶...

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

回答

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方法,您可以过滤结果。然后,将此分配给User型号的admin_objects属性。

admin_objects = UserAdminManager() 

一些在我的例子属性名称可能是错误的,因为我不知道你的模型设置,但希望你的想法。

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

0

这听起来对我来说最快和最简单的选择是添加一个新的管理视图到您的应用程序,特别是您的自定义用户模型。有关详细信息,请参阅Django admin docs,尽管听起来您已经知道如何使用管理员了。

一旦管理页面特定于您的模型,所有您的自定义字段将不再是外键。这将使过滤变得容易。

相关问题