2014-12-30 5 views
3

예상보다 많은 django 응용 프로그램을 사용하고 있으며 일부 데이터를 보관해야 궁극적 인 쿼리 속도가 느려지지 않습니다. 내 질문은 기존 모델을 보관하는 가장 좋은 방법은 무엇입니까? 여기에 지금까지 생각했을 것입니다 :Django에서 모델 데이터 보관

1 - 상속 된 모델 만들기 : - 뭔가 그것뿐만 아니라 보관 된 인스턴스를 생성합니다 내 원래 모델에 저장 될 때마다 그래서 post_save 방법을 만들기

class OriginalModel(models.Model): 
    ... 
    field = models.CharField(etc...) 
    ... 

class ArchivedModel(OriginalModel): 
    pass 

(2) .

3 - 원래 모델에서 샐러리로 퍼지 작업을 생성하여 관련 데이터 만 유지합니다.

하지만 모델 상속이 예상대로 작동하는지 확신 할 수 없습니다. 누군가가 이것에 대한 약간의 의견을 가지고 있다면 크게 감사 할 것입니다.

+0

최상의 솔루션은 프로젝트의 구체적인 세부 사항에 달려 있습니다. 일단 내가 한 일은 받아 들인 대답이 말한다. Django의 견해로는 수많은 것들이 복잡합니다. 관리 인터페이스를 통해 레코드를 찾으려고하는 것만큼이나 평범한 것 : 레코드가 아카이브 된 경우 아카이브에서 검색해야합니다. 그렇지 않으면 기본 테이블에서 검색해야합니다. 아, 이것은 극복할만한 것이지만, ORM 수준의이 분할은 곧 모든 곳에서 기습합니다. 나는 프로젝트가 성숙되면서 결국 하나의 테이블로 되돌아갔습니다. 언급 한 성능 문제는 DB 수준에서 해결해야합니다. – Louis

답변

3

ArchivedModel의 코드 데이터는 OriginalModel SQL 테이블에 있습니다. SQL 레벨 ArchivedModel에서는 id 필드가 OriginalModel 테이블을 참조하는 테이블이됩니다.

class AbstractModel(models.Model): 
    ... 
    field = models.CharField(etc...) 
    ... 
    class Meta: 
     abstract = True 

class OriginalModel(AbstractModel): 
    pass 

class ArchivedModel(AbstractModel): 
    pass 

을이 경우 OriginalModel에서 : 당신이 post_save 신호 ArchivedModel에 개체를 추가 할 경우 그래서 당신은 그것에서 모두 "진짜"모델을 abstract base class를 만들고 상속 할 필요가

:-) OriginalModel에서 중복됩니다 ArchivedModel은 동일한 필드 세트로 다른 SQL 테이블을 갖습니다.