为什么验证错误未显示在表单中

时间:2021-02-18 19:13:22

标签: python django django-views django-forms

我正在构建一个博客应用程序,但遇到了一个问题。

问题

<块引用>

未引发验证错误。

我想做什么

我做了一个功能,如果用户在浏览器页面的 past time 中选择 DateTimeField,则会显示验证错误。但错误正在显示。

forms.py

from django.core.exceptions import ValidationError

class PostForm(forms.ModelForm):
    date_added = forms.DateTimeField(initial=timezone.now)

        def clean_date(self):
            date_added = self.cleaned_data['date_added']
            if date_added.date() < datetime.date_added.today():
                raise forms.ValidationError("The date cannot be in the past!")
            return date_added

views.py

def new__blog_post(request,user_id):

    if request.method != 'POST':
        form = PostForm()
    else:
        form = PostForm(request.POST,request.FILES)
        new_post = form.save()
        new_post.post_owner = request.user
        new_post.save()
        return redirect('mains:posts',user_id=user_id)

    context = {'form':form,'posts':posts}
    return render(request, 'new_blog_post.html', context)

我的另一个与此相关的问题,Question

我不知道我做错了什么。

任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

要验证数据,您需要调用 Form.is_valid()。见Using forms to validate data

所以先调用is_valid()

def new__blog_post(request,user_id):
    if request.method == 'POST':
        form = PostForm(request.POST,request.FILES)
        if form.is_valid():
            new_post = form.save()
            new_post.post_owner = request.user
            new_post.save()
            return redirect('mains:posts',user_id=user_id)
    else:
         form = PostForm()
    posts = Post.objects.all()
    context = {'form':form,'posts':posts}
    return render(request, 'new_blog_post.html', context)

forms.py:

from django.core.exceptions import ValidationError
import datetime


class PostForm(forms.ModelForm):
    date_added = forms.DateTimeField(initial=timezone.now)

    class Meta:
        model = YourModel
        fields = ["date_added", ...]
    
    def clean_date_added(self):
        date_added = self.cleaned_data['date_added']
        if date_added.date() < datetime.added.today():
            raise forms.ValidationError("The date cannot be in the past!")
        return date_added
相关问题