Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法创建帖子,因为数据不存在';t验证-(当我在表单字段中设置过去时间时)_Python_Django_Django Views_Django Forms - Fatal编程技术网

Python 无法创建帖子,因为数据不存在';t验证-(当我在表单字段中设置过去时间时)

Python 无法创建帖子,因为数据不存在';t验证-(当我在表单字段中设置过去时间时),python,django,django-views,django-forms,Python,Django,Django Views,Django Forms,我正在构建一个博客应用程序,但我遇到了一个错误,我不断遇到这个错误:- 无法创建帖子,因为数据未验证 我想做的事 我做了一个功能,用户不能在DateTimeField中插入过去的日期。如果用户在字段中输入过去的日期,则应显示验证错误。我正在测试它,突然出现了一个新的错误 forms.py class PostForm(forms.ModelForm): date = forms.DateTimeField(initial=timezone.now) def clean_date

我正在构建一个博客应用程序,但我遇到了一个错误,我不断遇到这个错误:-

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

我想做的事

我做了一个功能,用户不能在
DateTimeField
中插入过去的日期。如果用户在字段中输入过去的日期,则应显示
验证错误。我正在测试它,突然出现了一个新的错误

forms.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
models.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\u post=form.save()行中。这意味着在保存表单时存在问题

问题

当我在
DateTimeField
中设置
now
的时间(默认为timezone.now)时,它工作正常,Post保存正常。但是,当我将当前时间(2021-02-18)更改为过去时间(
2019-02-18
)时,显示错误
,无法创建帖子,因为数据未验证

我不知道我做错了什么

任何帮助都将不胜感激


提前感谢您

要验证您需要调用
表单的数据。是否有效()
。看

因此,先调用
是否有效()

必须更改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
来自django.core.exceptions的
导入验证错误
导入日期时间
类PostForm(forms.ModelForm):
类元:
model=BlogPost
字段=[“发布标题”,“添加日期”]
添加的def清洁日期(自):
添加日期=自清理数据['date\u added']
如果date\u added.date()
您的表单是否允许某人更改日期?也许没有。可能是自动日期。但当我将其更改为未来日期或时间时,它工作正常。如果我将其更改为过去时间,则显示该错误。谢谢,它工作正常。我喜欢你在个人资料中的引语:-“养成为帮助你的答案和问题投票的习惯!”@Space,乐意帮助!
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)
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