我想知道我们是否可以在Django视图中更改ModelForm实例的字段值。例如,我有这个:
models.py
class hotel(models.Model):
image = models.ImageField(upload_to='hotel', verbose_name="Hotel Image")
name = models.CharField(max_length=60)
country = models.ForeignKey('country', on_delete=models.DO_NOTHING)
state = models.ForeignKey('state', on_delete=models.DO_NOTHING)
city = models.ForeignKey('city', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "hotels"
class Hotel(ModelForm):
class Meta:
model = hotel
fields = '__all__'
views.py
form = Hotel()
在将其传递给Django模板之前,是否可以修改此表单的城市,州和国家/地区字段:
return render(request, 'web/hotels.html', {'form':form})
我正在尝试将州和国家/地区字段的空值发送到Django模板。
我用这段代码解决了:
state = forms.ModelChoiceField(state.objects.all())
state.choices = []
city = forms.ModelChoiceField(city.objects.all())
city.choices = []
然后,我编写了jQuery代码,侦听国家或州的下拉菜单的值的变化,并分别加载其对应的州和国家。我将国家/地区的初始值保留为空白,因此现在仅加载第一个输入为空白的国家/地区。当用户选择一个国家时,它会使用jQuery加载其州,然后从州加载城市。
简而言之:在州和城市中加载空值->为国家和州的更改事件编写Ajax jQuery(这将在国家更改时填充州,在州更改时填充市)。
PS-jQuery的.done()在尝试在加载州之后加载城市时对我不起作用。因此,我将参数'flag'传递给我的Ajax函数,并在更改国家/地区时将其值保留为1,而在更改状态时将其值保留为2。在Ajax的成功属性中,如果标志为1(即状态已更改),我再次调用Ajax函数来加载城市(带有标志2)。