2012-08-16 130 views
2

鉴于下面的示例代码,验证没有重复code/account的最佳方法是什么?Django - unique_together验证

型号

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 

我已经找到答案提示somethi ng类似于使用clean_code(),但account似乎并不存在。你有什么建议?

回答

1

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

基本上干净的()可以访问通过cleaned_data各个领域。这是为了在Form中验证的方法。

如果你想在模型中做到这一点,请看pre_save。

+0

Jure,我明白你在说什么,但'帐户'似乎并不存在。 – RS7 2012-08-16 20:52:34

+0

啊,我明白了。在你的meta:fields =('code',),为什么不包括帐户?这样它将成为代码的一部分。你可以隐藏它。 – 2012-08-16 21:34:42