喜欢:共有三个下拉菜单:Country
、Province
和District
。
- 国家:当我点击国家下拉菜单时,它会显示所有国家。我会选择一个。
- 省:当我选择一个国家时,该省会根据国家过滤并显示该所选国家的所有省份。我会选择一个省。
- 地区:选择一个省份后,该地区会根据该省内的地区进行过滤。
我希望你得到我。我希望这在 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 所需的工作量更大。