Django Admin 中的 ForeignKey 或 ManyToMany 字段搜索
Posted
技术标签:
【中文标题】Django Admin 中的 ForeignKey 或 ManyToMany 字段搜索【英文标题】:ForeignKey or ManyToMany field search in Django Admin 【发布时间】:2013-05-23 23:31:50 【问题描述】:很抱歉,如果有人问过这个问题,但我到处寻找,似乎找不到什么会让它在我的脑海中点击。
如果我有这样的结构,是否可以在admin
中使ForeignKey
和ManyToMany
字段关系可搜索。那么,当输入价格信息时,可以搜索汽车制造商、类型和名称,而不是从下拉框中搜索数千辆汽车?
class Manufacturer(models.Model):
manufacturer = models.CharField(max_length=100)
class VehicleType(models.Model):
vehicle_type = models.CharField(max_length=100)
class VehicleInfo(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
vehicle_type = models.ForeignKey('VehicleType')
vehicle_name = models.CharField(max_length=200)
class RandomWebsitePriceInfo(models.Model):
vehicle_info = models.ManyToManyField('VehicleInfo')
website_price = models.FloatField()
我最理想的做法是通过下拉框(例如我将在其中选择制造商)中的关系,然后在车辆类型框中将是该制造商的可用车辆,然后在车辆信息框中将是该制造商制造的该类型的所有车辆。
或者只是让车辆信息可搜索,这样如果我输入车辆模型,它就会出现。
我查看了raw_input
和搜索字段,但似乎无法弄清楚。
谢谢 布赖恩
【问题讨论】:
【参考方案1】:Django 没有动态表单元素作为开箱即用的首选方法之一,但有几个项目使用 javascript 来添加它。
https://github.com/digi604/django-smart-selects 是我看到的主要推荐。
无需第三方项目即可使字段可搜索; @wobbily_col 的回答展示了如何做到这一点。
【讨论】:
开箱即用不支持向下钻取,但支持外键搜索。 下面这个答案是完美的。请尽量使用 django,而不是 raw 或 js @sheikhsalman08 - 下面的答案仅涵盖搜索相关字段,而不是“我会选择制造商,然后在车辆类型框中将是该制造商的可用车辆,然后在车辆信息框将是该制造商制造的该类型的所有车辆。”动态表单元素需要 js(不过如果 django-smart-selects 近 7 年后不再是主要选择,我不会感到惊讶)。【参考方案2】:假设您在 VehicleInfo 管理页面上,在您的 admin.py 中,尝试添加:
search_fields = ['vehicle_name' , 'vehicle_type__vehicle_type' , 'manufacturer__manufaturer' ]
盯着 Vehicle 模型,vehicle_name
在该字段上进行搜索。
现在manufacturer__manufacturer
将搜索制造商。双下划线表示它不是同一个object
上的字段,而是一个foreign key
要查找,所以第一个制造商指向制造商型号。第二个制造商告诉它在model
上查找制造商字段。
【讨论】:
@wobbily_col,您如何访问RandomWebsitePriceInfo
模型中的vehicle_info
字段?以上是关于Django Admin 中的 ForeignKey 或 ManyToMany 字段搜索的主要内容,如果未能解决你的问题,请参考以下文章