Джанго - Ошибка формы «Выберите правильный выбор.Этот выбор не является одним из доступных вариантов ». - PullRequest
0 голосов
/ 27 апреля 2019

Я работаю с Python3 и Django 2.2.

В основном у меня есть форма, которая содержит три раскрывающихся списка.Второе выпадающее меню зависит от значения первого.Третий раскрывающийся список зависит от значения второго.

Например, в раскрывающемся списке # 1 имеется опция «AreaA AreaB AreaC».Если выбрано «AreaA», в раскрывающемся списке № 2 должны отображаться параметры «RailwayA, RailwayB и RailwayC». Если выбрано Railway, в раскрывающемся списке № 3 должны отображаться параметры «StationA, StationB и StationC».

И я хочу этот виджетиз двух следующих:

● Ближайшая станция
первая: Район> Железная дорога (Ajax)> Станция (Ajax)
секунда: Район> Железная дорога (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
)

Как мне определить__init__ в form.py?

Сейчас я загружаю содержимое dropdown2 и dropdown3 с помощью Ajax (JQuery).Но когда я нажимаю кнопку «отправить», чтобы отправить данные поста, я всегда получаю сообщение об ошибке: «Выберите правильный вариант, например, следующий.

Вывод:
● Сначала ваша ближайшая станция
:Район (правильный)> Железная дорога (ошибка)> Станция (ошибка)
секунда: Район (правильный)> Железная дорога (правильная)> Станция (правильный)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...