2012-03-09 3 views
10

Django에서 "지원 테이블"을 처리하는 모범 사례가 있습니까?Django - "enum models"

무결성을 보장하지 않기 때문에 체크 조건을 만들지 않으므로 Field.choices을 싫어합니다. 따라서 본격적인 모델을 만드는 것이 더 좋습니다 (그리고 자주 지원 테이블에 필드를 추가하는 경우가 종종 있습니다).).

전체 모델을 사용하는 경우 올바른 방법은 테이블 내용에 대한 초기 데이터 고정 장치를 만드는 것이지만 행의 인스턴스 이름이 지정된 "올바른 방법"이라고 가정합니다. ..

class State(models.Model): 
    name = model.TextField() 

STATES = dict(
    NEW=State.objects.get(pk=0), 
    IN_PROGRESS=State.objects.get(pk=1), 
) 

... 이와 비슷한 것입니다.

무엇을 을 사용하십니까?

+2

지금이 11 개월 전에서,하지만 당신은 이것에 대한 특정 좋은 방법을 찾았나요? 동일한 것을 여기에서 생각해보십시오. – blaze

답변

8

Django ORM은 선택 속성 (사용자 양식을 통해 데이터를 삽입/업데이트 할 때)을 지정하면 무결성을 검사합니다.

데이터베이스 로직 유효성 검사 로직을 설정하고 db가이를 지원할 경우 데이터베이스 ENUM 필드를 사용할 수도 있습니다.

UPD는 :

class EnumField(models.Field): 

    def __init__(self, *args, **kwargs): 
     super(EnumField, self).__init__(*args, **kwargs) 
     if not self.choices: 
      raise AttributeError('EnumField requires `choices` attribute.') 

    def db_type(self): 
     return "enum(%s)" % ','.join("'%s'" % k for (k, _) in self.choices) 

GENDER_MALE = 'm' 
GENDER_FEMALE = 'f' 
GENDER_CHOICES = (
    (GENDER_MALE, 'Male'), 
    (GENDER_FEMALE, 'Female'), 
) 


class Person(models.Model): 
    name = models.CharField(max_length=50) 
    gender = EnumField(choices=GENDER_CHOICES) 
+2

제약 조건을 데이터베이스에두고 "enums"를 자체 테이블이있는 전체 모델로 만들고 싶습니다. 기본적으로 "Python"열거 형을 만드는 Python/Djangoish 방법에 대해 궁금합니다. – alex

+0

내 대답 업데이트 됨 – San4ez

+2

기타/지정되지 않았 음을 제안합니다! – Ashe

관련 문제