Django 管理员依赖的下拉 HTML 字段

问题描述 投票:0回答:1

我在 Country 模型中有一个 RegionSubRegion 外键。我的 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)

目前,每当我要添加/编辑一个国家/地区时,完整的区域和子区域都会在选择下拉列表中可见。我想要的是根据区域选择加载子区域的可能性。

django django-models django-forms django-admin django-admin-filters
1个回答
2
投票

经过长时间的研究,我能够解决这个问题。

我已经在我的应用程序中创建了 JS 文件。

静态\地理位置\j

© www.soinside.com 2019 - 2024. All rights reserved.