在我的Django 1.5模型中,我正在尝试创建一个表格,让我在书房预订一个地方。
研究室的定义如下models.py
:
class StudyRoom(models.Model):
name = models.CharField(max_length = 30, primary_key = True)
city = models.CharField(max_length = 30)
placesno = models.IntegerField()
def __unicode__(self):
return self.name
这是相对的形式:
class SearchSeat(forms.Form):
morning = 'AM'
evening = 'PM'
daysection_choices = ((morning, 'Morning'), (evening, 'Evening'),)
city = forms.ChoiceField(choices = [], required=True, label='Select a city?')
study_room = forms.ChoiceField(choices = [], required=True, label='Select a study room?')
day = forms.DateField(label = 'Select a day', required=True, widget=forms.extras.SelectDateWidget(years=range(2014, 2015)))
section = forms.ChoiceField(choices=daysection_choices, label = 'Morning (form 8.00 to 13.00) or evening (from 13.00 to 18..)?')
def __init__(self, *args, **kwargs):
super(SearchSeat, self).__init__(*args, **kwargs)
self.fields['city'].choices = StudyRoom.objects.all().values_list("city","city").distinct()
search_city = self.fields['city']
self.fields['study_room'].choices = StudyRoom.objects.filter(city = search_city).values_list("name")
目标是让用户选择城市,然后过滤学习室并仅显示所选城市中的所有城市,所有这些都在一个表格中而不更改页面。
这样写的代码不起作用,我开始认为没有使用客户端脚本的解决方案(这是一个Django + Python项目所以我们应该只使用那两个工具)
答案 0 :(得分:1)
对于您的问题,只能有客户端脚本的解决方案:
在创建html时,未确定study-room
个选项。这意味着在city
更改时,您将需要操纵您的html,这意味着客户端编程如下:
$(document).ready(function(){
$('#id_city').on('change', function(){
...
})
);
不需要ajax请求:您可以将选项保存到html中的“data”属性中并使用以下命令进行访问:http://api.jquery.com/data/
然后您需要修改字段:
self.fields['city'] = forms.Select(attrs={'data-london':'[json_dump of londondata], 'data-paris': '[json_dump of paris study rooms]' etc})
根据数据量,ajax调用将是一个更清洁的解决方案