Я работаю с 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).Но когда я нажимаю кнопку «отправить», чтобы отправить данные поста, я всегда получаю сообщение об ошибке: «Выберите правильный вариант, например, следующий.
Вывод:
● Сначала ваша ближайшая станция
:Район (правильный)> Железная дорога (ошибка)> Станция (ошибка)
секунда: Район (правильный)> Железная дорога (правильная)> Станция (правильный)