首页 > 解决方案 > 无法创建帖子,因为数据未验证 - (当我在表单字段中设置过去时间时)

问题描述

我正在构建一个 BlogApp,但我遇到了一个错误,并且不断收到此错误:-

无法创建帖子,因为数据未验证。

我想做什么

我做了一个功能,用户不能在DateTimeField. 并且如果用户在字段中输入过去的日期,Validation Error则应显示 a。我正在测试它,突然发生了一个新错误。

表格.py

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

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

视图.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)

模型.py

class BlogPost(models.Model):
    post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
    post_title = models.CharField(max_length=500,default='')
    date_added = models.DateTimeField(null=True,default=timezone.now)

它显示错误new_post = form.save()在行。这意味着保存表格有问题。

问题

当我设置时间now(作为 timezone.now 作为默认值)DateTimeField然后它工作正常,Post 保存正常。但是,当我将当前时间 (2021-02-18) 更改为过去时间 ( 2019-02-18) 时,它会显示该错误The Post could not be created because the data didn't validate

我不知道我做错了什么

任何帮助,将不胜感激。

先感谢您

标签: pythondjangodjango-viewsdjango-forms

解决方案


要验证您需要调用的数据Form.is_valid()。请参阅使用表单验证数据

所以先打电话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()

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

必须更改 clean 方法的名称 - forms.py:

from django.core.exceptions import ValidationError
import datetime

class PostForm(forms.ModelForm):
    class Meta:
        model = BlogPost
        fields = ["post_title","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

推荐阅读