我假设您试图在用户选择国家后向用户显示一组有限的“地区”选项,并在用户选择地区后向用户显示一组有限的“城市”选项,以便提供一种方式明智地为房地产选择一个城市,而不是从一长串随机城市中挑选一些东西?
您可以在 RealEstate ModelForm 上指定其他字段,这些字段不是 RealEstate 模型上的实际字段,并在表单的 .__init__() 中提供逻辑,如果需要,还可以在 .clean() 和 .save() 方法中提供额外的处理字段。也许是这样的:
class Country(models.Model):
name = models.CharField(...)
class Region(models.Model):
name = models.CharField(...)
country = models.ForeignKey(Country, on_delete=models.CASCADE)
class City(models.Model):
name = models.CharField(...)
region = models.ForeignKey(Region, on_delete=models.CASCADE)
class RealEstate(models.Model):
name = models.CharField(...)
city = models.ForeignKey(City, on_delete=models.CASCADE)
class RealEstateForm(forms.ModelForm):
country = forms.ChoiceField(required=False)
region = forms.ChoiceField(required=False)
class Meta:
model = RealEstate
fields = ['name', 'city', 'country', 'region']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['country'].choices = Country.objects.all().values('id', 'name)
self.fields['region'].choices = Region.objects.all().values('id', 'name', 'country__id')
self.fields['city'].choices = City.objects.all().values('id', 'name', 'region__id', 'region__country__id')
提供包含每个城市的参考区域 ID 和国家/地区 ID 的选项将允许您在前端过滤这些选项,如果您在用户选择国家和地区时设法使用这些选项,而无需发出单独的后端请求获取过滤后的列表。当然,您最终会以这种方式一次性发送更大的响应 - 如果您的数据集规模非常大(有多少国家、多少地区、多少城市),这可能是不需要的。