我有一个像Django模型:
class hotel(models.Model):
name = models.CharField(max_length=60)
city = models.ForeignKey('city', on_delete=models.DO_NOTHING)
state = models.ForeignKey('state', on_delete=models.DO_NOTHING)
country = models.ForeignKey('country', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "hotels"
class city(models.Model):
name = models.CharField(max_length=60)
state = models.ForeignKey('state', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "cities"
class state(models.Model):
name = models.CharField(max_length=60)
country = models.ForeignKey('country', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "states"
class country(models.Model):
name = models.CharField(max_length=60)
code = models.CharField(max_length=160)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "countries"
和ModelForm一样:
class Hotel(ModelForm):
class Meta:
model = hotel
fields = '__all__'
[编辑]从Hotel ModelForm创建表单对象时,Django自动填充外键字段的值。我想阻止那个。
例如:
form = Hotel()
(Django自动填充城市,州和国家/地区的值)
我希望我的Django模板在下拉列表中返回所有国家/地区值,但不希望返回州和城市的下拉列表(因此,我希望在Django模板中,州和城市的下拉列表保持空白)。我怎样才能做到这一点?
PS-这样做的目的是先加载国家/地区值,然后根据用户对某个国家/地区的选择,先加载州,然后再加载城市。
您可以在form__init__
方法中覆盖选择,也可以在定义字段后使用一些技巧来设置选择
class Hotel(ModelForm):
class Meta:
model = hotel
fields = '__all__'
# Like this
state = forms.ModelChoiceField(state.objects.all())
state.choices = []
city = forms.ModelChoiceField(city.objects.all())
city.choices = []
# Or like this...
def __init__(self, data=None, *args, **kwargs):
super().__init__(data=data, *args, **kwargs)
if not data:
self.fields['state'].queryset = state.objects.none()
self.fields['city'].queryset = state.objects.none()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句