我的模型看起来像这样:
class Asset(models.Model):
serial_number = models.CharField(max_length=100, unique=True)
asset_tag = models.CharField(max_length=100, unique=True)
class WorkOrder(models.Model):
asset = models.ForeignKey(Asset)
基本上提交了工单,然后管理员将资产分配给工单。 asset_tag字段是我们可以扫描的条形码。在django admin中编辑工单时,默认情况下,资产字段显示为窗口小部件。我们希望能够做的是拥有一个搜索字段,以便我们可以扫描资产标签,然后在数据库中搜索正确的资产以与工作订单相关联。
我知道你可以自定义django admin外键到硬编码查询,但我无法弄清楚如何获取它所以它根据管理页面上的字段进行搜索。
答案 0 :(得分:28)
你看过raw_id_fields
吗?
接近你所追求的目标应该非常接近。
答案 1 :(得分:4)
如果您使用的是 Django> = 2.0 ,则可以利用名为autocomplete_fields
的功能。您必须在相关对象的ModelAdmin上定义search_fields
,因为自动完成搜索会使用它。
由于您与ForeignKey
中的Asset
有WorkOrder
关系,因此在应用程序的admin.py
中添加以下内容:
from django.contrib import admin
@admin.register(Asset)
class AssetAdmin(admin.ModelAdmin):
search_fields = ["serial_number", "asset_tag"]
@admin.register(WorkOrder)
class WorkOrderAdmin(admin.ModelAdmin):
autocomplete_fields = ["asset"]
将要用于搜索的字段添加到search_fields
,然后添加定义autocomplete_fields
,如上面的代码所示。
答案 2 :(得分:2)
现在您可以使用Django 2.0中的autocomplete_fields
。
非常整洁。