代码之家  ›  专栏  ›  技术社区  ›  jeannicolas

使用django admin中的用户配置文件字段筛选用户列表

  •  5
  • jeannicolas  · 技术社区  · 16 年前

    我正在尝试使用用户配置文件字段筛选Django中的用户列表…我需要实现一个队列系统,在该系统中新用户被放入队列中,直到管理员批准他们。

    我只是简单地加了一个 is_in_queue 布尔字段到我的用户配置文件模型…但是,在我的管理区域中显示用户列表时,我意识到您不能使用模型的外键字段(在本例中,是一个用户配置文件字段)来筛选列表。

    显然地, list_display 项目可以是可调用的,但 list_filter 不能,所以我可以列出一个用户是否在队列中而没有问题,但是管理员必须滚动整个用户列表以找出队列中哪些用户没有意义…只筛选队列中的用户(使用userprofile.in-queue)会更实用…

    最后,我考虑向我的管理区域添加一个自定义视图,该视图将只列出队列中的用户,但该自定义视图不会显示在管理区域索引页上,并且只为新的筛选选项组合一个全新的管理站点似乎有点过头了…

    所以基本上总结一下:我可以根据 用户配置文件字段?如果没有,我可以添加一个可访问的自定义视图吗 从首页开始,无需创建全新的 仅用于管理?

    3 回复  |  直到 13 年前
        1
  •  1
  •   Derek Reynolds    16 年前

    您可能希望了解使用自定义管理器 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 = UserAdminManager()
    

    我的示例中的一些属性名称可能是错误的,因为我不知道您的模型设置,但希望您能理解这个想法。

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

        2
  •  3
  •   tback Acorbe    13 年前
        3
  •  0
  •   Tom Leys    16 年前

    在我看来,最快也是最简单的选择是为应用程序添加一个新的管理视图,特别是为您的自定义用户模型。见 Django admin docs 有关详细信息,尽管听起来您已经知道如何使用admin了。

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

    推荐文章