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

时间:2011-08-20 19:41:10

标签: 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)

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

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

3 个答案:

答案 0 :(得分:28)

你看过raw_id_fields吗?

接近你所追求的目标应该非常接近。

答案 1 :(得分:4)

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

由于您与ForeignKey中的AssetWorkOrder关系,因此在应用程序的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

非常整洁。