【问题标题】:How can I link (connect) two dropdowns in django admin如何在 django admin 中链接(连接)两个下拉菜单
【发布时间】:2021-10-26 09:44:51
【问题描述】:

赞:共有三个下拉菜单:CountryProvinceDistrict

  1. 国家:当我点击国家下拉菜单时,它会显示所有国家。我会选择一个。
  2. 省:当我选择一个国家时, 省份根据国家过滤并显示所选国家的所有省份。我会选择一个省。
  3. 区:选择一个省后,该区会根据该省内的区进行过滤。

我希望你得到我。我希望这在 Django admin 中成为可能

【问题讨论】:

    标签: django django-admin django-admin-tools


    【解决方案1】:

    无需额外库的可能解决方案

    使用raw_id_fields 不会像您描述的那样为您提供选择框,但会打开一个对话框,从中可以搜索并选择该地区。这可以直接使用 Django Admin 而不是其他库。

    你没有为你的模型和管理员提供代码,所以我假设一个非常简单的模型结构来说明解决方案。

    鉴于这些模型:

    class Country(Model):
        name = TextField(...)
        ....
    
    class Province(Model):
        name = TextField(...)
        country = ForeignKey(..., unique=True)
        ....
    
    class District(Model):
        name = TextField(...)
        province = ForeignKey(..., unique=True)
        ....
    

    还有一些使用国家/地区的模型:

    class SomeLocation(Model):
        district = ForeignKey(..., unique=True)
    

    我假设您想要管理 UI 的这个模型只需要 district 字段,因为它唯一地定义了省和国家。但是对于用户来说,首先选择国家和省份可能会更容易,而不是从庞大的地区列表中进行选择。

    假设:countryprovince 的选择是为了更好的用户体验。

    如果您为SomeLocation 启用管理员:

    from django.contrib.admin import register, ModelAdmin
    
    @register(District):
    class DistrictAdmin(ModelAdmin):
        list_display = ['name', 'province__name', 'province__country__name']
        list_filter = ['province', 'province__country']
        search_fields = ['name', 'province__name', 'province__country__name']
    
    @register(SomeLocation)
    class SomeLocationAdmin(ModelAdmin):
        ....
        raw_id_fields = ['district']
        
    

    选择解决方案

    您必须通过使用额外的库(例如 https://pypi.org/project/django-ajax-selects/)来自定义管理员,或者编写您自己的逻辑,包括 JS。这可能比管理 UI 所需的工作量更大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多