2011-02-14 6 views
0

내 모든 모델은 특정 기본 필드가되도록, 상속 클래스 템플릿을 시도하고있어, 모두가 save_model 같은 몇 가지 기능()장고 모델 클래스 상속 - 기본 필드와 재정

하는 경우에 대한 기본 우선이 나는

class ModelExtension(models.Model): 
    altered_by = models.CharField(max_length=64) 

class SomeModel(ModelExtension): 
    class Meta: 
     db_table = 'app_somemodel' 
    fields = models.CharField() 
    ... 

바로 작업 상속의이 종류를 얻을 수있는 방법이 있나요 ... 내가 오버라이드 (override)를 얻을, 이런 식으로 작업을 수행하지만 그때 가서 수동으로 db_table 같은 메타 데이터를 설정해야? 지금까지이 접근법의 단점을 보완하기 위해 추가 작업을해야하거나 MRO 오류로 인해 어려움을 겪고 있습니다 .2

답변

3

MRO 오류 란 무엇입니까? 모델 상속에 대한 django 문서를 읽었습니까? 추상 기본 클래스, 다중 테이블 상속 또는 프록시 모델을 가질 수 있습니다. 당신이했던 어떤

http://docs.djangoproject.com/en/1.2/topics/db/models/#abstract-base-classes

는 멀티 테이블 상속는 - 당신의 두 가지 모델을 연결 OneToOneField 숨겨져있다. 왜 db_table이 필요하다고 생각하는지 모르겠다. 그렇지 않아야한다.

맨손 클래스 ModelExtension을 사용하지 않으려면 추상 기본 클래스가 필요합니다. 이 경우 meta = 섹션에 abstract = True를 넣으면 기본 클래스의 모든 필드가 자식 클래스의 테이블에 추가됩니다. 문서는 제가 여기있는 것보다 더 잘 설명합니다.

나는 종종 자신이 그것을 하나의 방법을 시작하고 내 데이터베이스 구조에 대한 자세한 내용을 생각하는 앞뒤로 여러 번 뒤집어 찾을

....

+0

db_table을 지정하지 않으면 상속 된 모든 모델의 db_table이 'app_modelextension' – samurailawngnome

+0

입니다. 나는 abstract = True가 그것을했다고 생각한다. – samurailawngnome

+1

MRO : http://www.python.org/download/releases/2.3/mro/ – samurailawngnome

0

당신은 단지에 새로운 기능를 추가하려면 모델을 변경하지 않고 proxy model!

+0

기능 및 필드를 원합니다. – samurailawngnome