Django admin:搜索外键对象而不是<select>?

Mar*_*ark 16 django django-admin

我的模型看起来像这样:

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)
Run Code Online (Sandbox Code Playgroud)

基本上提交工单,然后管理员将资产分配给工单.asset_tag字段是我们可以扫描的条形码.在django admin中编辑工单时,默认情况下,资产字段显示为窗口小部件.我们希望能够做的是拥有一个搜索字段,以便我们可以扫描资产标签,然后在数据库中搜索正确的资产以与工作单相关联.

我知道你可以自定义django admin外键到硬编码查询,但我无法弄清楚如何获取它所以它根据管理页面上的字段进行搜索.

ari*_*rie 28

你看看了raw_id_fields吗?

应该接近你所追求的东西.


lmi*_*asf 20

如果您使用的是Django >= 2.0,则可以利用名为autocomplete_fields. 您必须search_fields在相关对象的 ModelAdmin 上进行定义,因为自动完成搜索使用它。

由于您ForeignKeyAssetin有关系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"]
Run Code Online (Sandbox Code Playgroud)

将要用于搜索的字段添加到search_fields,并添加定义autocomplete_fields,如上面的代码所示。


kig*_*was 6

现在,您可以使用autocomplete_fieldsDjango 2.0中的。

非常整洁。