0

私は彼らがここに持っているdjangoフォーム検証ウォークスルーで作業しようとしています

しかし、私は立ち往生しているようです。私のパラメーター (受信者) の 1 つが通過していないようですが、他のパラメーターは通過しているようです。

これが私のhtmlフォームです:

<form action= "receiver" method="post" >
{% csrf_token %}
<p><label for="id_subject">Subject:</label>
    <input id="id_subject" type="text" name="subject" maxlength="100" /></p>
<p><label for="id_message">Message:</label>
    <input type="text" name="message" id="id_message" /></p>
<p><label for="id_sender">Sender:</label>
    <input type="text" name="sender" id="id_sender" /></p>
<p><label for="id_recipients">Recipients:</label>
    <input type="text" name="recipients" id="id_recipients" /></p>
<p><label for="id_cc_myself">Cc myself:</label>
    <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>
<input type="submit" value="Submit" />
</form>

models.py の関連するモデル クラスは次のとおりです。

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    recipients = MultiEmailField(required=True)
    cc_myself = forms.BooleanField(required=False)

関連するビューは次のとおりです。

def reciever(request):
    form = ContactForm(request.POST) # A form bound to the POST data  
    print form
    if request.method == 'POST':
        if form.is_valid():
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            sender = form.cleaned_data['sender']
            cc_myself = form.cleaned_data['cc_myself']      
            recipients = form.cleaned_data['recipients']
            template = loader.get_template('helloworld/receiver.html')

            context = RequestContext(request,{
                    'subject':subject,                          
                    'sender':sender,
                    'message': message,
                    'cc_myself': cc_myself,
                    'recipients': recipients,
        })
        return HttpResponse(template.render(context))
    else:
        context = RequestContext(request,{
            'form': form, 
        })
        template = loader.get_template('helloworld/wrong.html')
        return HttpResponse(template.render(context))

ビューにはあまり入り込みません。印刷フォームから、次の出力でリクエストが無効であることがわかります。

<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" maxlength="100" name="subject" type="text" value="slkj" /></td></tr>
<tr><th><label for="id_message">Message:</label></th><td><input id="id_message" name="message" type="text" value="lkjqw" /></td></tr>
<tr><th><label for="id_sender">Sender:</label></th><td><input id="id_sender" name="sender" type="text" value="ij@aol.com" /></td></tr>
**<tr><th><label for="id_recipients">Recipients:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_recipients" name="recipients" type="text" /></td></tr>**
<tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input id="id_cc_myself" name="cc_myself" type="checkbox" /></td></tr>

そのため、何らかの理由で、フォーム ボックス (fake@aol.com) に情報を入力しても、フォームを通過していないようで、その理由がよくわかりません。

編集:すみません、重要な部分を忘れていました。また、チュートリアルの指示に従って、model.py にカスタム クラスを追加しました。

class MultiEmailField(forms.Field):
    def to_python(self, value):
        "Normalize data to a list of strings."

        # Return an empty list if no input was given.
        if not value:
            return []
        return value.split(',')

    def validate(self, value):
        "Check if value consists only of valid emails."

        # Use the parent's handling of required fields, etc.
        super(MultiEmailField, self).validate(value)

        for email in value:
            validate_email(email)
4

0 に答える 0