Как получить modelform_instance.cleaned_data['поле ManyToMany'], когда поле формы имеет тип ModelMultipleChoiceField?
Вот ситуация:
У меня есть модель, как показано ниже:
class School(Model):
name = CharField(...)
Модель разрешения имеет три объекта:
School.objects.create(name='school1') # id=1
School.objects.create(name='school2') # id=2
У меня есть другая модель:
Interest(Model):
school_interest = ManyToManyField(School, blank=True,)
Затем я строю ModelForm, используя Interest:
class InterestForm(ModelForm):
school_interest = ModelMultipleChoiceField(queryset=School.objects.all(), widget=CheckboxSelectMultiple, required=False)
class Meta:
model = Interest
fields = '__all__'
У меня есть мнение:
def interest(request):
template_name = 'interest_template.html'
context = {}
if request.POST:
interest_form = InterestForm(request.POST)
if interest_form.is_valid():
if interest_form.cleaned_data['school_interest'] is None:
return HttpResponse('None')
else:
return HttpResponse('Not None')
else:
interest_form = InterestForm()
context.update({interest_form': interest_form, })
return render(request, template_name, context)
и в Interest_template.html у меня есть:
<form method="post">
{% csrf_token %}
{{ interest_form.as_p }}
<button type="submit">Submit</button>
</form>
Я ожидаю увидеть None, когда не проверяю ни одно из полей формы и отправляю его.
Я ожидаю увидеть "Нет", когда я проверяю любое или все поля формы и отправляю форму.
Тем не менее, я не вижу, что я ожидаю, что произойдет.
1 ответ
Я изменил свой взгляд на это, и это сработало:
def interest(request):
template_name = 'interest_template.html'
context = {}
if request.POST:
interest_form = InterestForm(request.POST)
if interest_form.is_valid():
if not interest_form.cleaned_data['school_interest']:
return HttpResponse('None')
else:
return HttpResponse('Not None')
else:
interest_form = InterestForm()
context.update({interest_form': interest_form, })
return render(request, template_name, context)