Django表单:不显示任何表单错误

时间:2018-09-17 16:08:51

标签: django django-models django-templates django-views

我的Django doSomething遇到了问题。我想显示form validation并将所有字段设为form errors。我不知道为什么在模型文件中未定义required时我的字段可以接受空白。

这是我的模特:

blank

这是我的表格:

class Customer(models.Model):
    email = models.CharField(max_length=150, verbose_name=_('e-mail'), null=False)
    first_name = models.CharField(max_length=70, verbose_name=_('first name'), null=False)
    last_name = models.CharField(max_length=70, verbose_name=_('last name'), null=False)
    country = models.ForeignKey(Country, verbose_name=_('country'))
    institution = models.CharField(max_length=255, verbose_name=_('institution'), null=True)
    creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('creation date'), null=False)
    modification_date = models.DateTimeField(auto_now=True, verbose_name=_('modification date'), null=False)

    class Meta:
        verbose_name = _('customer')
        verbose_name_plural = _('customer')

    def __str__(self):
        return f"{self.email}"

您可以在这里找到Django CBV的视图:

class CustomerForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(CustomerForm, self).__init__(*args, **kwargs)
        self.fields['country'].empty_label = _('Select a country')  
        self.fields['country'].queryset = self.fields['country'].queryset.order_by(
            'name')  
        for key in self.fields:
            self.fields[key].required = True

    class Meta:
        model = Customer
        fields = ['email', 'first_name', 'last_name', 'country', 'institution']
        widgets = {
            'email': forms.TextInput(attrs={'placeholder': _('name@example.com')}),
            'first_name': forms.TextInput(attrs={'placeholder': _('First Name')}),
            'last_name': forms.TextInput(attrs={'placeholder': _('Last Name')}),
            'institution': forms.TextInput(attrs={'placeholder': _('Agency, company, academic or other affiliation')}),
        }

最后是我的模板:

class HomeView(CreateView):
    """ Render the home page """

    template_name = 'app/index.html'
    form_class = CustomerForm

    def get_context_data(self, **kwargs):
        kwargs['document_list'] = Document.objects.all().order_by('publication__category__name')
        return super(HomeView, self).get_context_data(**kwargs)

    def post(self, request, *args, **kwargs):
        if request.method != 'POST':
            return HttpResponseRedirect(self.get_success_url())

        form = self.form_class(request.POST)
        email = request.POST['email']
        country_id = request.POST['country']
        country = Country.objects.get(id=country_id)

        for checkbox in request.POST.getlist('DocumentChoice'):
            document = Document.objects.get(id=checkbox)
            token = self.gen_token(email, document.edqm_id)
            Download.objects.create(email=email, country=country, pub_id=checkbox, token=token,
                                    expiration_date=now + timedelta(minutes=10))

            if not form.is_valid():
                print('form invalid')
                continue

        return HttpResponseRedirect(self.get_success_url())

问题:

根据必填字段,我不知道为什么我要提交表单时不显示缺失值错误。

我必须显示模板中显示的字段,因为我必须进行引导程序设计。

为了显示表格错误,我必须写{% extends "publication/base_backend.html" %} {% load staticfiles %} {% load i18n %} {% load crispy_forms_tags %} {% block main %} <form method="post" id="customerform" novalidate> {% csrf_token %} <h3>{% trans 'Your information' %}</h3> <hr> <div class="col-sm-12 col-md-12 col-lg-12"> {{ form.email|as_crispy_field:"bootstrap" }} </div> <br /> <br /> <br /> <br /> <div class="alert alert-info col-sm-12 col-md-12 col-lg-12" role="alert"> <small>{% trans "The fields below are optional if you have already requested a publication:" %}</small> </div> <div class="col-sm-5 col-md-5 col-lg-5"> {{ form.first_name|as_crispy_field:"bootstrap" }}<br> {{ form.country|as_crispy_field:"bootstrap" }} </div> <div class="col-sm-5 col-md-5 col-lg-5 col-sm-offset-2 col-md-offset-2 col-lg-offset-2"> {{ form.last_name|as_crispy_field:"bootstrap" }}<br> {{ form.institution|as_crispy_field:"bootstrap" }} </div> <div class="col-md-12"> <br /> <br /> </div> <input type="submit" class="btn btn-default" value="{% trans 'Save' %}"/> <a href="{{ request.META.HTTP_REFERER }}" class="btn btn-default">{% trans 'Cancel' %}</a> </form> ,但是什么也没有出现。

先谢谢您

0 个答案:

没有答案