我正在构建一个博客应用程序,但遇到了一个问题。
问题
<块引用>未引发验证错误。
我想做什么
我做了一个功能,如果用户在浏览器页面的 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
我不知道我做错了什么。
任何帮助将不胜感激。
提前致谢。
答案 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