我们如何在将ModelForm实例发送到模板作为响应之前更改它?

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

我想知道我们是否可以在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模板。

python django
1个回答
0
投票

我用这段代码解决了:

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)。

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