我正在使用Python3和Django 2.2。
基本上,我有一个包含三个下拉菜单的表单。第二个下拉列表取决于第一个下拉列表的值。第三个下拉菜单取决于第二个下拉菜单的值。
例如,下拉菜单1中的选项为“ AreaA AreaB AreaC”。如果选择了“ AreaA”,则下拉菜单2将显示选项“ RailwayA,RailwayB和RailwayC”;如果选择了“铁路”,则下拉菜单3将显示选项“ StationA,StationB和StationC”。
而且,我希望这个像下面的两个小部件。
●您附近的车站
first:区域>铁路(Ajax)>车站(Ajax)
第二个:区域>铁路(阿贾克斯)>站(阿贾克斯)
所以我的问题来了。如何定义表格?
这是我到目前为止所拥有的:
■️model.py
class NearStation(models.Model):
area = models.ForeignKey(Area, on_delete=models.CASCADE, null=True)
railway = models.ForeignKey(Railway, on_delete=models.CASCADE, null=True)
station = models.ForeignKey(Station, on_delete=models.CASCADE, null=True)
profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
class Area(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Railway(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Station(models.Model):
name = models.CharField(max_length=255)
railway = models.ForeignKey(Railway, on_delete=models.PROTECT)
area = models.ForeignKey(Prefecture, on_delete=models.PROTECT)
def __str__(self):
return self.name
■️form.py
class NearStationForm(forms.ModelForm):
area = forms.ModelChoiceField(queryset=Prefecture.objects.all(), label='Area', required=True)
railway = forms.ModelChoiceField(queryset=Railway.objects.none(), label='railway', required=True)
station = forms.ModelChoiceField(queryset=Station.objects.none(), label='station', required=True)
def __init__(self, *args, **kwargs):
super(NearStationForm, self).__init__(*args, **kwargs)
for i in range(2):
area = 'form-'+str(i)+'-near_station_area'
railway = 'form-'+str(i)+'-near_station_railway'
if area in self.data:
self.fields['railway'].queryset =Railway.objects.filter(station__area_id__exact=self.data[area]).distinct()
if area in self.data and railway in self.data:
self.fields['station'].queryset =Station.objects.filter(area_id__exact=self.data[area], railway_id__exact=self.data[railway])
class Meta:
model = NearStation
fields = ('area', 'railway', 'station',)
NearStationFormSet = forms.modelformset_factory(
model=NearStation,
form=NearStationForm,
extra=2
)
我应该如何在form.py中定义__init__
?
现在,我正在使用Ajax(JQuery)加载dropdown2和dropdown3的内容。但是,当我按下“发送”按钮发送帖子数据时,总是收到错误消息:“选择一个有效的选择,如下所示。
输出:
●您近的车站
first:区域(正确)>铁路(错误)>车站(错误)
秒:区域(正确)>铁路(正确)>车站(正确)