2015-12-31 3 views
0

Когда я пытаюсь проверить свою форму с помощью электронного письма, которое уже было введено в базу данных, оно не дает сообщение об ошибке, как должно, оно перенаправляет обратно на главную страницу.Ошибки проверки не отображаются в форме Django

Мой views.py файл выглядит следующим образом:

from django.shortcuts import render 
from .forms import LotteryForm 
from django.http import HttpResponseRedirect 

# Create your views here. 
def lottery_list(request): 
    return render(request, 'lottery/lottery.html', {}) 

def lottery_new(request): 
    if request.method == 'POST': 
     form = LotteryForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('lottery_submitted') 
     else: 
      return render(request, 'lottery/lottery.html' {'form': LotteryForm()}) 
    else: 
     form = LotteryForm() 
     return render(request, 'lottery/lottery.html', {'form': LotteryForm()}) 

Моя форма: форма

from django import forms 
from django.db import models 
from django.forms import ModelForm 
from .models import Lottery 
from .models import Lottery_user 
from django.core.exceptions import ValidationError 

class LotteryForm(forms.ModelForm): 
    lottery_type = forms.ModelChoiceField(queryset = Lottery.objects.all(), empty_label=None) 
    first_name = forms.CharField(required=True) 
    last_name = forms.CharField(required=True) 
    lottery_numbers = forms.CharField(max_length=12, required=True) 
    email = forms.EmailField(required=True) 
    telephone = forms.CharField(max_length=18, 
        error_messages={'invalid':'Enter a valid mobile number', 
            'required':'Enter a valid mobile number'}) 

    def clean_email(self): 
     email = self.cleaned_data['email'] 
     if Lottery_user.objects.filter(email=email).exists(): 
      raise ValidationError("Email already exists") 
      return email 
     if Lottery_user.objects.filter(email=self.cleaned_data['email']).exists(): 
      raise ValidationError("You've already entered") 
      return email 

    class Meta: 
     model = Lottery_user 
     fields = ['lottery_numbers', 'lottery_type', 'first_name', 'last_name', 'email', 'telephone',] 

Шаблон:

<form action="{% url 'lottery_new' %}" method="post"> 
     {% csrf_token %} 
     <div class="fieldWrapper"> 
      <label for="lotterytype">Choose a lottery:</label> 
      {{ form.lottery_type }} 
      <p>See <a href=lottery_instructions>instructions and rules</a></p> 
     </div> 
     <div class="fieldWrapper"> 
      <label for="lotterynumbers">Lottery Numbers:</label> 
      {{ form.lottery_numbers }} 
     </div> 
     <div class="fieldWrapper"> 
      <label for="firstname">First name:</label> 
      {{ form.first_name }} 
     </div> 
     <div class="fieldWrapper"> 
      <label for="lastname">Last name:</label> 
      {{ form.last_name }} 
     </div> 
     <div class="fieldWrapper"> 
      {{ form.email.errors }} 
      {{ form.email.non_field_errors }} 
      <label for="email">Email:</label> 
      {{ form.email }} 
     </div> 
     <div class="fieldWrapper"> 
      <label for="phonenumber">Telephone Number:</label> 
      {{ form.telephone }} 
     </div> 
     <button type="submit" class="btn btn-default">Submit</button> 
    </form> 

Я хочу, чтобы пользователь не сможет введите дважды с тем же адресом электронной почты, поэтому он должен ошибаться, когда пользователь нажимает кнопку отправки с использованием используемого адреса электронной почты.

Кроме того, кто-нибудь знает, как получить сообщения об ошибках, чтобы показать, прежде чем пользователь отправит, а не потом?

+0

Не могли бы вы добавить код для визуализации формы в шаблоны. – Zoli

+0

Я только что добавил его для вас – CNB

ответ

1

Вы возвращаете вновь созданную форму, если форма недействительна, когда вы должны вместо этого вернуть недопустимую форму (с ошибками). Попробуйте:

def lottery_new(request): 
    if request.method == 'POST': 
     form = LotteryForm(request.POST) 
     if form.is_valid(): 
      .... 
     else: 
      return render(request, 'lottery/lottery.html' {'form': form}) 
+0

Спасибо, что сработало. Хотя, он по-прежнему позволяет мне отправить форму, предоставив сообщение об ошибке. – CNB

+0

Я проработал, спасибо за вашу помощь. – CNB

+0

Знаете ли вы, почему я не могу получить сообщения об ошибках перед тем, как пользователь отправит? – CNB

Смежные вопросы