在 admin 中按外键 id 搜索

Posted

技术标签:

【中文标题】在 admin 中按外键 id 搜索【英文标题】:Search by foreign key id in admin 【发布时间】:2012-02-28 18:01:49 【问题描述】:

我正在尝试实现一些看似简单的目标,但在 Google 和此处都找不到任何答案。我有一个 Django 模型,非常简单:

class Shipment(models.Model):
    id = models.AutoField(primary_key=True)
    transaction = models.ForeignKey(Transaction)

我希望能够通过 transaction.id 在我的 Shipment Admin 页面中进行搜索。为了清楚起见, 我想要这个(这段代码显然不起作用):

class ShipmentAdmin(admin.ModelAdmin):
    list_display = ('id', 'transaction')
    search_fields = ['id', 'transaction.id']

这不起作用,因为 transaction.id 没有命名字段。任何想法? “搜索”是指能够在“发货管理”页面的搜索框中插入我的交易 ID,按“搜索”并自动检索相应的交易。

【问题讨论】:

【参考方案1】:

与其他管理选项一样,您需要使用 __ for foreign keys 例如

search_fields = ['id', 'transaction__id']

【讨论】:

如果你要上两层外键,它似乎不起作用,即 'allocation__project__name' 在分配有一个 FK 到项目并且项目有一个名称的情况下不起作用。你怎么解决这个问题?我不断收到“ 不是可调用的, 的属性” @radtek,这似乎对我有用,我可以做 fk1__fk2__field,只在 1.7 中尝试过,分配和项目只是 ForeignKey()? 是的,我知道它应该可以工作,我什至在 django 文档上看到了一个示例,但由于某种原因它对我不起作用。如果我找不到解决方法,我将设置一个包含冲突代码的示例 repo。 @radtek 抱歉回复晚了,很奇怪,可能不是,但您是否尝试过删除所有其他管理选项,以确保其不会误导信息? 您需要将等号与search_fields = ('=id',) 之类的东西一起使用。否则默认情况下会执行like 查询,因此对6 的查询也可以返回1556 的结果。通常不是这个意图。【参考方案2】:

search_fields documentation:

您还可以使用查找 API“跟随”表示法对 ForeignKey 或 ManyToManyField 执行相关查找

解决方案:

search_fields = ['id', 'transaction__id']

【讨论】:

以上是关于在 admin 中按外键 id 搜索的主要内容,如果未能解决你的问题,请参考以下文章

使用linq在mvc5中按外键表分组表

Django - 无法按外键 first_name 过滤

按外键和日期分组数据,按日期汇总

在搜索字段中正确使用外键引用,Django admin

需要在 Mongoose 中获取按外键分组的记录列表

按外键/相关字段分组 django 查询集