【问题标题】:Django adminsite customize search_fields queryDjango adminsite 自定义 search_fields 查询
【发布时间】:2011-03-04 19:34:57
【问题描述】:

在 django 管理员中,您可以为 ModelAdmin 设置 search_fields 以便能够搜索那里给定的属性。我的模型类有一个不是真实模型属性的属性,这意味着它不在数据库表中。该属性与另一个未通过关系绑定到当前模型的数据库表相关。 但我希望能够搜索它,所以我必须以某种方式自定义管理站点创建的查询,以便在填充搜索字段时进行过滤 - 这可能吗?如果,如何? 我可以查询我的自定义属性的数据库表,然后它返回适合搜索的模型类的 ID。然后,正如我所说,这必须流入管理站点搜索查询。

谢谢!

【问题讨论】:

  • 你可能是指在另一个模型上定义的反向关系?

标签: python django django-admin


【解决方案1】:

从 django 1.6 开始,您可以通过在 ModelAdmin 子类中定义 get_search_results 方法来自定义搜索。

django documentation 中有很好的解释。以下示例是从该文档中复制的。

class PersonAdmin(admin.ModelAdmin):
    list_display = ('name', 'age')
    search_fields = ('name',)

    def get_search_results(self, request, queryset, search_term):
        queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
        try:
            search_term_as_int = int(search_term)
            queryset |= self.model.objects.filter(age=search_term_as_int)
        except:
            pass
        return queryset, use_distinct

【讨论】:

    【解决方案2】:

    你应该使用search_fields = ['foreign_key__related_fieldname'] 比如扩展admin.ModelAdmin的管理类中的search_fields = ['user__email']

    阅读更多here

    【讨论】:

    • 这与@shahjapan 的回答相同
    【解决方案3】:

    这可能会有所帮助

    search_fields = ['foreign_key__related_fieldname']

    http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields

    【讨论】:

    • 好吧,正如我所说,模型类不绑定到另一个模型,所以没有外键。因此这不起作用。
    猜你喜欢
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2015-08-23
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多