python - 无法创建帖子,因为数据未验证 - (当我在表单字段中设置过去时间时)
问题描述
我正在构建一个 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
。
我不知道我做错了什么
任何帮助,将不胜感激。
先感谢您
解决方案
要验证您需要调用的数据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
推荐阅读
- c# - 将 Action 作为参数传递给方法并实例化
- javascript - Uncaught ReferenceError: Modernizr is not defined at HTMLDocument In Google Console
- r - 只有当它等于一个条件时才删除最后两个字符
- python - 只能比较具有相同标签的 Series 对象
- linux - 在 centOS 中运行运行文件时出错 - 显示错误
- python - 提取自定义 XML 标记
- php - 在 null (PostsController) 上调用成员函数 store()
- java - 使用二分搜索查找数字的平方根
- javascript - v-for 不重新渲染数组 vue js
- virtualbox - FreeBSD 挂载失败并出现错误:设备不支持操作