2013-03-22 2 views
2

생성/저장합니다.
my_category.products.create(...) 또는 그와 비슷한 번호 my_category.is_leaf_node() == False을 호출하면 오류가 발생합니다.
my_category에 이미 제품이있는 경우 my_category.children.create(...)과 동일하지만 실패 할 것입니다.
이러한 확인은 save 메소드에서 수행됩니까? 커스텀 매니저에서? 아니면 다른 곳? 나는 모델 수준의 검증을 원할 것이다.장고 모델 전에 내가 두 모델이

+0

form.is_valid() 메소드에서 검사를 수행 할 수 있습니다. 양식에서 처리하는 경우 form.is_valid() 메소드를 사용하고, 그렇지 않은 경우 save() 메소드에서 검사 할 수 있습니다. – PepperoniPizza

+0

https://docs.djangoproject.com/en/dev/ref/forms/validation/에서 특정 필드에 대한 유효성을 구체적으로 사용자 정의 할 수 있습니다. https://docs.djangoproject.com/en/dev/ref/forms/validation/# 청소 및 유효성 검사 필드 -the-dependent-on-each-other – akotian

+1

양식을 사용하고 있지 않습니다. 모델 레벨 – olanod

답변

4

모델 수준 유효성 검사의 적절한 위치는 clean() 기능입니다. 오류를 설명하기 위해 여기 django.core.exceptions.ValidationError을 제기 할 수 있습니다. 살펴보기 the documentation for clean()

+1

에서 검사를하고 싶습니다. 처형 됐어? – olanod

+1

clean은 ModelForm 유효성 검사 중에 호출되는 full_clean에 의해 호출됩니다. 어떤 식 으로든 ModelForm을 사용하지 않는다면 일반적으로 객체를 저장하기 전에 ValidationError를 잡아내는 try 블록에서 object.full_clean()을 호출하는 것이 좋습니다. 모델을 작성하거나 뷰를 생성하는 등의 표준 방법을 사용하지 않을 경우 객체를 저장하는 방법을 알아야합니다. – minism

+0

지금은 단위 테스트 만하고, 나머지는 django-rest-framework로 REST API에서 사용할 것입니다. . 당신의 조언에 따라 save() 메소드에서 full_clean()을 호출하고 있는데, 예외를 상위 레벨에서 catch해야합니까? – olanod

관련 문제