0

あるユーザーが別のユーザーをレビューできるようにするフォーム ReviewForm があります (レビューのソースとレビューのターゲット)。ユーザーが自分自身をレビューしていないことを確認したいと思います。それを行う場所は、ReviewForm 自体にする必要があると思います。ただし、2 人のユーザー (ソースとターゲット) は、以前に UI を介して選択されているため、フォームの一部ではありません。これを行う最もクリーンな方法は何ですか? 現在、ビューで検証を行っていますが、それはうまくいきません。

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})

ありがとうございました。

4

1 に答える 1

0

これを試して:

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"]
于 2013-06-20T05:50:45.627 に答える