django - 如何在 django admin 中链接(连接)两个下拉菜单
问题描述
喜欢:共有三个下拉菜单:Country
、Province
和District
。
- 国家:当我点击国家下拉菜单时,它会显示所有国家。我会选择一个。
- 省:当我选择一个国家时,该省会根据国家过滤并显示该所选国家的所有省份。我会选择一个省。
- 地区:选择一个省份后,该地区会根据该省内的地区进行过滤。
我希望你得到我。我希望这在 Django admin 中成为可能
解决方案
没有额外库的可能解决方案
使用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
字段,因为它唯一地定义了省和国家。但是对于用户来说,首先选择国家和省份可能会更容易,而不是从庞大的地区列表中进行选择。
假设: 和 的选择country
是province
为了更好的用户体验。
如果您启用管理员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/ )来自定义 Admin,或者编写自己的逻辑,包括 JS。这可能比管理 UI 所需的工作量更大。
推荐阅读
- c# - 占据列表的前 26 位
- reactjs - TypeError: Object(...) is not a function when using react-toastify
- c# - 在 SAP HANA Studio 中重命名架构
- c++ - 对于黑客等级中的“两个字符串”问题,我在三个测试用例中遇到分段错误。是什么原因?
- c++ - 为什么我的 while 函数没有终止?
- javascript - 来自 .env 项的链接在 Vue.js 中被销毁
- angular - Cytoscape.js 并在订阅中加载数据
- c# - 更新 c# 项目安装程序
- python - TypeError:“ReadFile”Op 的输入“文件名”的类型为 float32,与预期的字符串类型不匹配
- javascript - Babel 没有在 Expo 中转换 TypeScript