Django - unique_together验证

时间:2012-08-16 20:32:50

标签: django django-models django-forms django-validation

根据下面的示例代码,验证每code没有重复account的最佳方法是什么?

模型

class Post(models.Model):
    account = models.ForeignKey('Account', editable=False)
    code = models.CharField()

    class Meta:
        unique_together = ('account', 'code')

表格

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('code',)

查看

def post_add(request):
    try:
        account = Account.objects.get(membership__user=request.user)
    except:
        login_url = reverse('login') + ('?next=%s') % request.path
        return HttpResponseRedirect(login_url)

    post = Post()

    if request.method == "POST":
        post_form = PostForm(request.POST, prefix='post')

        if post_form.is_valid():
            post = post_form.save(commit=False)
            post.account = account
            post.save()

        # other code

我发现答案提示类似于使用clean_code(),但account似乎并不存在。你有什么建议?

1 个答案:

答案 0 :(得分:1)

以下是文档中的相关示例:https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

基本上clean()可以通过cleaning_data访问所有字段。这是在Form中进行验证的方法。

如果你想在模特中这样做,请看pre_save。