【问题标题】:Django admin: search for foreign key objects rather than <select>?Django admin:搜索外键对象而不是 <select>?
【发布时间】:2023-03-22 17:40:02
【问题描述】:

我的模型如下所示:

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 管理员中编辑工作订单时,默认情况下 asset 字段显示为 &lt;select&gt; 小部件。我们想要做的是有一个搜索字段,以便我们可以扫描资产标签,然后在数据库中搜索正确的资产以与工作订单相关联。

我知道您可以将 Django 管理外键自定义为硬编码查询,但我不知道如何获取它,因此它会根据管理页面上的字段进行搜索。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    你看过raw_id_fields吗?

    应该很接近你所追求的。

    【讨论】:

      【解决方案2】:

      现在您可以使用 django 2.0 中的 autocomplete_fields

      很漂亮。

      【讨论】:

        【解决方案3】:

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

        由于您在WorkOrder 中与AssetForeignKey 关系,因此请在您应用的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,并添加define autocomplete_fields,如上面的代码所示。

        【讨论】:

          猜你喜欢
          • 2015-09-28
          • 2015-06-15
          • 2020-08-19
          • 2013-01-20
          • 2015-05-04
          • 2012-02-28
          • 2016-08-22
          • 1970-01-01
          • 2015-06-29
          相关资源
          最近更新 更多