Django-表单错误“选择一个有效的选择。该选择不是可用的选择之一。”

时间:2019-04-27 15:32:22

标签: django

我正在使用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:区域(正确)>铁路(错误)>车站(错误)
秒:区域(正确)>铁路(正确)>车站(正确)

0 个答案:

没有答案