Как получить 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)
Другие вопросы по тегам