2009-07-06 3 views
29

필자의 모델을 (.values ​​()와 같은 종류의 값을 가지고 있지만 관계를 순회하면서) 값을 쉽게 해석 할 수 있도록 믹스 인을 작성하고있다. 이들의 정의를 할 수있는 깨끗한 장소는 라, 모델에 자신을 것 같다 :Django 모델의 Meta 클래스에 속성 추가하기

TypeError: 'class Meta' got invalid attribute(s): schema 

(전체 스택 추적 :

class Person(models.Model, DeepValues): 
    name = models.CharField(blank=True, max_length=100) 
    tribe = models.ForeignKey('Tribes') 

    class Meta: 
     schema = { 
      'name' : str, 
      'tribe' : { 
       'name' : str 
      } 
     } 

Person.objects.all().deep_values() => { 
    'name' : 'Andrey Fedorov', 
    'tribe' : { 
     'name' : 'Mohicans' 
    } 
} 

그러나, 장고 내 함께 class Meta이 포함 뿌려 here)

이제는 믹스 인에서 정교하게이를 무시할 수는 있지만이 정보를 저장하는 더 우아한 방법이 있습니까?

답변

45

나는 우아한에 대해 잘 모르지만, 한 실용적인 방법은 다음과 같습니다

import django.db.models.options as options 

options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('schema',) 

물론, 장고 지금까지 자신의 '스키마'속성을 추가 한 경우이 휴식 것입니다. 그러나 이봐, 그것은 생각이다 ... 당신은 언제나 충돌 할 가능성이 적은 속성 이름을 선택할 수있다.

+5

후손을 위해,하지만 작동하지 않습니다 : options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('default_values',) –

+2

오 ... 내 솔루션은 DEFAULT_NAMES를 목록으로 변환하기 때문에 아마도 당신의 세련미 그것을 튜플로 유지합니다. –

+0

가능성이 큽니다! :) –