【问题标题】:Hot to add the ability to search in UserProfile to UserAdmin in Django | search_fields w/ ForeignKey将在 UserProfile 中搜索的功能添加到 Django 中的 UserAdmin search_fields w/ ForeignKey
【发布时间】:2009-11-27 01:40:00
【问题描述】:

我将 Django 的用户管理与通过 ForeignKeys 链接到用户模型的 UserProfile 结合使用。现在,我想让用户配置文件中的字段可从 UserAdmin 搜索。

我最好的猜测是使用这样的用户:

class UserAdmin(auth.admin.UserAdmin):

    def field_name(self, obj):
        return obj.get_profile().name

    list_display = ('field_name',)

    search_fields = ('field_name',)

虽然 list_display 工作正常,但 search_fields 在提交查询时给我一条错误消息:无法将关键字“field_name”解析为字段。选择是:[...]

您对如何执行此操作有任何线索吗?提前谢谢你。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    您可以使用带有双下划线 __ 的查询集表示法来表示连接,例如。

     search_fields = ('company_name','user__username')
    

    http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

    了解更多

    【讨论】:

    • 真正的问题是auth_user 表没有配置文件模型的ForeignKey,反之亦然。用户模型中唯一的连接是 .get_profile() 方法,它不能使用双下划线访问,因为它是一个方法,而不是一个字段。
    • 对不起,反向关系可以工作。 profile__name 或 profile__name__ 之类的内容取决于您的架构。在 ipython 中梳理出这些东西是件好事。它将是 User.objects.filter(what__you__want='foo')。如果您仍有问题,您可能希望发布您的个人资料模型
    • 谢谢你,迈克尔。反向关系成功了。我不知道为什么我还没有从您指向 django 文档的链接中得到它。也许我只是太累了,无法清晰地思考。
    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多