簡體   English   中英

Django 表單與動態查詢集 ModelMultipleChoiceField

[英]Django form with dynamic queryset ModelMultipleChoiceField

我正在嘗試將查詢集作為初始值傳遞給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)

視圖.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():...

您可以通過打印form.errors字段輕松找到您的表單錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM