Форма Django с динамическим набором запросов ModelMultipleChoiceField - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь передать queryset формам ModelMultipleChoiceField в качестве начального значения. Я хочу отправить отфильтрованный queryset как все варианты и первоначальный выбор. Вроде не получается is_valid. Может кто-нибудь сказать мне, что я делаю не так?

forms.py

class sendListForm(forms.Form):

    recipients = forms.ModelMultipleChoiceField(queryset = CustomUser.objects.all())
    title = forms.CharField(max_length=100,required=True)
    description = forms.CharField(max_length=500,required=False,widget=forms.Textarea(attrs={'cols': 20, 'rows': 4}))
    extraInfo = forms.CharField(max_length=500,required=False, help_text='Add a message to send',widget=forms.Textarea(attrs={"rows":4, "cols":20}),label='Extra Message')
    startDate = forms.DateField(required=False,widget=forms.HiddenInput())
    startTime = forms.TimeField(required=False,widget=forms.HiddenInput())
    endDate = forms.DateField(required=False,widget=forms.HiddenInput())
    endTime = forms.TimeField(required=False,widget=forms.HiddenInput())
    yearName = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        recipients = kwargs.pop('recipients')
        super(sendListForm, self).__init__(*args, **kwargs)
        self.fields['recipients'] = forms.ModelMultipleChoiceField(queryset=recipients)

views.py

def eventSendList(request, modelPk=None):

    event = get_object_or_404(Event, pk=modelPk)

    if request.method == 'POST':
        form = sendListForm(request.POST,recipients=CustomUser.objects.all())
        if form.is_valid():
            print('valid')

    baseInfo = {
        'recipients':recipients,
        'title':event.title,
        'description':event.description,
        'startDate':event.startDate,
        'startTime':event.startTime,
        'endDate':event.endDate,
        'endTime':event.endTime,
        'yearName':event.yearName.name,
    }

    classParents = CustomUser.objects.all()
    form = sendListForm(initial=baseInfo,recipients=classParents) 

    return render(request, 'page/sendListForm.html',{'form':form})  

Оно никогда не преодолеет if form.is_valid():... в представлении.

1 Ответ

0 голосов
/ 07 ноября 2019

Вы можете легко найти ошибки формы, напечатав поле form.errors.

...