2013-07-20 1 views
2

Django 모델에 규칙을 추가하는 방법 기본적으로 필요하지 않은 특정 필드를 만들기 위해 장고 모델에 규칙을 추가 할 수 있습니까? 다른 필드가 설정된 경우 필요합니다. 심지어 다른 방법 장고; 필드 집합에 대한 요구 종속성

주위 것은 이제 나는이 모델 있다고 가정 해 봅시다 :

class Item(models.Model): 

    name = models.CharField(max_length = 75) 
    cant_be_sold = models.BooleanField() 
    flat_price = models.IntegerField(blank = True, null = True, default = None, validators = [MinValueValidator(0)]) 
    defense = models.IntegerField(blank = True, null = True, default = None, validators = [MinValueValidator(0)]) 
    required_classes = models.ManyToManyField('otherappname.Class', related_name = 'Requires_Classes', blank = True, null = True, default = None) 

이의 여기에서이 상황이있을 수 있다고 가정 해 봅시다을;

  1. cant_be_soldTrue으로 표시하고; 지금 flat_price는 None (NULL)
  2. 만 입력 할 수 있습니다. defense; 지금은 하나 이상을 선택해야합니다 required_classes

나는 장고에서 이것을하는 좋은 방법이 무엇인지 궁금합니다. 내 Item Model이 70 개가 넘는 속성 필드를 가지고 있기 때문에 부적절한 항목을 방지하는 데 도움이 될 것입니다. 이는 내 시스템에서 Item Variance가 크게 확장 되었기 때문입니다.

+0

django 양식을 사용하고 있습니까? –

+0

@HieuNguyen 아직은, 사용자 정의 된 장고 관리 양식을 사용하기 전에 모델에 넣을 수있는 논리가 얼마나되는지 확인하려고합니다. 삽입 할 테스트 데이터가 많아서 지금은 많이 디버깅 할 수 있습니다. –

답변

4

모델에 clean 방법을 씁니다. 여기에서 필드 값을 변경하고 유효성 검사 오류를 발생시킬 수 있습니다. 다음 예제는 시작해야합니다.

def clean(self): 
    if self.cant_be_sold and self.flat_price is not None: 
     raise ValidationError("flat_price must be None when cant_be_sold is True") 
+0

Thanks Alasdair. 그렇게 열심히 보이지 않는다 :) 작은 질문. 오늘 밤까지 일을 시작할 수 없다. ValidationErrors를 한꺼번에 표시하거나 항상 한 번만 표시 할 수 있습니까? 즉, 실행을 종료하기 전에 모두 수집하십시오. –

+0

예외를 발생 시키면 정리 기능을 종료합니다. 한 번에 여러 개의 오류를 표시하려면 목록에서 오류를 수집 한 다음 끝에 예외를 발생시킵니다. 모델 양식은 [한 번에 여러 개의 오류를 필드에 할당하는] 방법을 제공합니다 (https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend- on-each-other). – Alasdair

+0

충분히 공정 :) 모델에서 필드 (그 위에있는 기본 빨간색 메시지)를 표시 할 수 있습니까? 아니면 그 시점부터 Forms가 필요합니까? –