2012-08-16 8 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') 

양식 somethi을 제안

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

는 다음 문서에서 관련 예제 :() https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

기본적으로 깨끗한 cleaned_data를 통해 모든 필드에 액세스 할 수 있습니다. 이는 양식 내에서 유효성 확인을위한 접근 방식입니다.

모델에서 수행하려는 경우 pre_save를 확인하십시오.

+0

나는 당신이 말하는 것을 이해하지만 '계좌'는 존재하지 않는 것 같습니다. – RS7

+0

아, 알겠습니다. meta : fields = ('code',)에서 계정을 포함하지 않는 이유는 무엇입니까? 이렇게하면 코드의 일부가됩니다. 숨길 수 있습니다. –

관련 문제