2017-01-01 4 views
0

Я хочу, чтобы ошибки были надписью над полем, если оно не заполнено. Это мой views.py:Ошибка проверки формы, когда требуемое поле остается пустым в django

@login_required(login_url='user_profile:login') 
    def NewWriting(request): 
     if request.method=="POST": 
      form=WritingForm(request.POST) 
      if form.is_valid(): 
       post=form.save(commit=False) 
       post.author=request.user 
       post.save() 
       return redirect('user_profile:index') 

     else: 
      form = WritingForm() 
      subject = Subject.objects.all() 
      return render(request,'user_profile/writing_form.html', {'form':form , 'subject':subject}) 

что я должен добавить в мой код? Спасибо

ответ

0

Не видя ваш класс формы ...

Вариант 1:

  • Если вы действительно хотите, чтобы пользователь мог отправить форму с пустыми данными, а затем конкретно показать им эту ошибку, используя форму, установите required=False kwarg для определенного поля в вашем классе WritingForm. Затем переопределить метод clean_<fieldname> (link), а затем вы можете сделать:

    def clean_<fieldname>: 
        if self.cleaned_data['<fieldname>'].strip() == '': 
         raise ValidationError('This field cannot be blank!') 
        return self.cleaned_data['<fieldname>'] 
    

Замена <fieldname> с тем, что что имя_поля есть.

Вариант 2:

  • default for any form, чтобы сделать все необходимые поля (IE: required=True kwarg на поле). Поэтому в общем случае, если поле требуется, большинство браузеров по крайней мере переместите курсор в пустое поле и не разрешит отправку формы, пока в поле не будет данных.

Кроме того, необходимо, чтобы вернуть форму, связанную в том случае, когда form.is_valid() возвращает значение False, или вы никогда не будете видеть ошибки (сейчас вы ничего не возвращается, если форма является недействительным). Пожалуйста, просмотрите django docs here для общего шаблона функционального представления, используя формы.

0

Вам нужно добавить еще одну штуку для рендеринга, если форма недействительна, и в вашем шаблоне вам необходимо использовать form.errors. Нечто подобное должно работать так, чтобы ошибки проверки формы затем передаются обратно в UI/шаблон для отображения пользователю:

@login_required(login_url='user_profile:login') 
def NewWriting(request): 
    form = None 
    if request.method=="POST": 
     form=WritingForm(request.POST) 
     if form.is_valid(): 
      post=form.save(commit=False) 
      post.author=request.user 
      post.save() 
      return redirect('user_profile:index') 

    if form is None: 
     form = WritingForm() 
    subject = Subject.objects.all() 
    return render(request,'user_profile/writing_form.html', {'form':form , 'subject':subject}) 
Смежные вопросы