使用排除的字段验证Django模型表单
我有一个表单ReviewForm,允许一个用户查看另一个用户(查看的来源和查看的目标)。我想检查一下用户是否没有自我审查,我认为应该在审查表单本身中进行审查。但是,这两个用户(源用户和目标用户)不是表单的一部分,因为它们以前是通过UI选择的。最干净的方法是什么?现在我正在视图中进行验证,但我觉得这并不好使用排除的字段验证Django模型表单,django,django-forms,Django,Django Forms,我有一个表单ReviewForm,允许一个用户查看另一个用户(查看的来源和查看的目标)。我想检查一下用户是否没有自我审查,我认为应该在审查表单本身中进行审查。但是,这两个用户(源用户和目标用户)不是表单的一部分,因为它们以前是通过UI选择的。最干净的方法是什么?现在我正在视图中进行验证,但我觉得这并不好 class ReviewForm(forms.ModelForm): class Meta: model = models.Review fields=[
class ReviewForm(forms.ModelForm):
class Meta:
model = models.Review
fields=["title", "content"]
class Review(models.Model):
title=models.CharField(max_length=50,blank=True)
content=models.TextField(blank=True)
source=models.ForeignKey(Profile,related_name="reviews_by")
target=models.ForeignKey(Profile,related_name="reviews_of")
def new_review(request,profile_id):
form=ReviewForm()
if request.method=='POST':
review=models.Review()
review.source=request.user.profile
review.target=models.Profile.objects.get(id=profile_id)
form = ReviewForm(request.POST, instance = review)
if request.user.profile.id == int(profile_id):
form.errors["__all__"]= "Don't review yourself!"
if form.is_valid():
form.save()
return redirect(reverse("profile"))
else:
return render(request,"reviews/new.html",{"form":form})
return render(request,"reviews/new.html",{"form":form})
谢谢。试试这个:
class ReviewForm(forms.ModelForm):
def clean(self):
if self.instance.source == self.instance.target:
raise forms.ValidationError("You cannot review your entity")
return super(ReviewForm, self).clean()
class Meta:
model = models.Review
fields=["title", "content"]