1

当用户输入无效的电子邮件地址时,我在显示错误消息时遇到问题。

这是我的 forms.py 文件:

from django import forms
from .models import Contact
from django.db import models


class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = [
            'name',
            'email',
            'message',
        ]

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget = forms.TextInput(attrs={
            'placeholder': 'Name', 
            'required': True})

        self.fields['email'].widget = forms.TextInput(attrs={
            'placeholder': 'Email',
            'required': True})

        self.fields['message'].widget = forms.Textarea(attrs={
            'placeholder': 'Message',
            'rows': 6,
            'required': True})

这是我的 models.py 文件

from django.db import models
from django import forms
from django.core.validators import EmailValidator

# Create your models here.
class Contact(models.Model):
    name = models.CharField(max_length = 50)
    email = models.EmailField(blank = False, max_length = 200)
    message = models.TextField(blank = False)

这是我的views.py 文件:

from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponseRedirect

from .models import Contact
from .forms import ContactForm
from django.contrib import messages

# Create your views here.

def contact_create(request):
    form = ContactForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit = False)
        instance.save()
        form = ContactForm()
        messages.success(request, 'Your message was sent successfully. We will contact you shortly.')
        return HttpResponseRedirect('/home/#contact')

    context = {
        "form": form,
    }

    return render(request, 'index.html', context)

最后是我在 index.html 文件中的表单

{% include "messages_display.html" %}
<form method="POST" action="">
    {% csrf_token %}
    <div class="row half">

        <div class = "6u" > {{ form.name }} </div>
        <div class = "6u" > {{ form.email }} </div>

    </div>
    <div class="row half">
        <div class="12u"> {{ form.message }} </div>
    </div>
    <div class="row">
        <div class="12u">
            <ul class="actions">
                <input type="submit" class="button" value="Send Message" />
            </ul>
        </div>
    </div>
</form>

所以,message.success 显示得很好,没有问题,我想,如果用户输入无效的电子邮件地址,在电子邮件字段下显示错误消息,就像 name 字段或 message 字段留空一样,它是显示“请填写此字段”。

谢谢您的帮助。

4

2 回答 2

3

当名称或消息字段为空时,您的表单不会显示错误,原因与它不显示无效电子邮件错误的原因相同:因为您没有在模板中放置任何内容来显示这些错误。您需要添加{{ form.email.errors }}etc 才能做到这一点。

于 2016-03-12T17:45:22.677 回答
1

要显示邮件字段的错误消息,表单的电子邮件字段应为forms.EmailInput

因此,您的 forms.py 文件应该是:

from django import forms
from .models import Contact
from django.db import models


class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = [
            'name',
            'email',
            'message',
        ]

    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget = forms.TextInput(attrs={
            'placeholder': 'Name', 
            'required': True})

        self.fields['email'].widget = forms.EmailInput(attrs={
            'placeholder': 'Email',
            'required': True})

        self.fields['message'].widget = forms.Textarea(attrs={
            'placeholder': 'Message',
            'rows': 6,
            'required': True})
于 2016-03-12T17:57:36.110 回答