У меня есть два зависимых поля в Django Modelform. Первый 'foo_type' (переключатели) используется для выбора типа 'foos', динамически загружаемого в поле 'foos'.
'foos' может быть либо полным полем с 'Cats', 'Dogs' или Объекты модели «Лошади» и должны поддерживать множественный выбор.
Как я могу определить набор запросов ModelMultipleChoiceField «на лету», что означает, что когда пользователь выбирает одну из радиокнопок «foo_type», набор запросов «foos» изменяется соответственно захватить объекты модели «Кошки», «Собаки» или «Лошади»?
Это вообще возможно?
Какой подход я должен go использовать в этом случае?
Обозначение: эти два зависимых поля ('foo_type' и 'foos') не являются модельными полями, они используются только для вычисления данных из выбранных 'foos' и будут использоваться для заполнения отдельных поле, которое не будет отображаться в пользовательском интерфейсе.
forms.my
class AlertForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['subject'] = forms.CharField(label='Objet',widget=forms.TextInput(attrs={ 'class': 'form-control' }))
self.fields['message'] = forms.CharField(label='Message',required=False,widget=forms.Textarea(attrs={ 'class': 'form-control' }))
self.fields['extra_recipients'] = forms.ModelMultipleChoiceField(queryset=Contacts.objects.all(), label='Extra recipient',widget=forms.SelectMultiple(attrs={ 'class': 'form-control' }))
# Radio buttons to define 'foos' content below
self.fields['foo_type'] = forms.ChoiceField(choices=AlertFilterList.choices(),label='Foo type',required=True,widget=forms.RadioSelect(attrs={ 'class': 'custom-control custom-radio' }))
# Content loaded using Ajax based on 'foo_type' selection above
self.fields['foos'] = forms.ModelMultipleChoiceField(queryset=?????????, label='Foos',widget=forms.SelectMultiple(attrs={ 'class': 'form-control' }))
class Meta(object):
model = Alerts
fields = ('subject','type','level','message')
def clean_subject(self):
subject = self.cleaned_data['subject']
def clean_message(self):
message = self.cleaned_data['message']
def clean_foo_type(self):
foo_type = self.cleaned_data['foo_type']
return foo_type
def clean_foos(self):
foos = self.cleaned_data['foos']
return foos