无需额外库的可能解决方案
使用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/)来自定义管理员,或者编写您自己的逻辑,包括 JS。这可能比管理 UI 所需的工作量更大。