我在 Country 模型中有一个 Region 和 SubRegion 外键。我的 SubRegion 模型还有一个用于 Region 模型的 Region 外键。我很难根据所选的 Region 在国家/地区模型中显示 SubRegion 下拉列表。
实现这一目标的最佳方法是什么?如果下拉列表基于其父项的值,那就太好了。
模型.py
class Region(models.Model):
name = models.CharField(max_length=20)
is_active = models.BooleanField(verbose_name='is active?', default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class SubRegion(models.Model):
region = models.ForeignKey(Region, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
is_active = models.BooleanField(verbose_name='is active?', default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'Sub Regions'
class Country(models.Model):
name = models.CharField(max_length=100)
region = models.ForeignKey(Region, on_delete=models.CASCADE, verbose_name='Region')
subregion = models.ForeignKey(SubRegion, on_delete=models.CASCADE, verbose_name='Sub Region')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
admin.py
class CountryAdmin(admin.ModelAdmin):
list_display = ('name', 'is_active', 'is_default', 'created_at', 'updated_at', )
list_filter = ('region', 'subregion', 'is_active', 'is_default', 'created_at', 'updated_at', )
search_fields = ('name', 'official_name', )
fieldsets = (
('Region Information', {'fields': ('region', 'subregion', )}),
('Basic Information', {'fields': ('name', 'official_name', )}),
('Codes Information', {'fields': ('cca2', 'ccn3', 'cca3', 'cioc','idd', 'status', )}),
('Coordinates', {'fields': ('latitude', 'longitude', )}),
('Membership & Statuses', {'fields': (('is_independent', 'is_un_member', 'is_default', 'is_active', ), )}),
('Country Flag', {'fields': ('png_flag_url', 'svg_flag_url', )}),
('Country Map', {'fields': ('google_map_url', 'openstreet_map_url', )}),
('Additional Information', {'fields': ('population', 'area', 'start_of_week', 'postal_code_format', 'postal_code_regex', )}),
)
inlines = [CountryTopLevelDomainInline, CountryCurrencyInline, CountryTimezoneInline]
admin.site.register(Country, CountryAdmin)
目前,每当我要添加/编辑一个国家/地区时,完整的区域和子区域都会在选择下拉列表中可见。我想要的是根据区域选择加载子区域的可能性。
经过长时间的研究,我能够解决这个问题。
我已经在我的应用程序中创建了 JS 文件。
静态\地理位置\j