【问题标题】:Django - unique_together validationDjango - unique_together 验证
【发布时间】:2012-08-13 06:23:45
【问题描述】:

鉴于下面的示例代码,验证每个 account 不存在重复的 code 的最佳方法是什么?

型号

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 在这一点上似乎不存在。你有什么建议?

【问题讨论】:

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


    【解决方案1】:

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

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

    如果要在模型中进行,请查看 pre_save。

    【讨论】:

    • Jure,我明白你在说什么,但account 似乎不存在。
    • 啊,我明白了。在你的 meta: fields = ('code',) 中,为什么不包括帐户?这样,它将成为代码的一部分。你可以把它隐藏起来。
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 2010-12-27
    • 2016-12-20
    • 2014-05-02
    • 2015-11-22
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多