2011-09-04 4 views
0

Django orm에서 특이한 작업을하고 싶습니다.여러 유형의 모델에 대한 추가 정보

나는 Car 모델을 가지고 있습니다. 유형별로 분리되고 다른 모델에 저장되는 추가 정보로 어떻게 확장 할 수 있습니까?

예를 들어, truckCar "My Truck"을 입력하려면 TruckInfo 모델로 확장하고 싶습니다.

다른 항목 "My Bus"는 BusInfo 모델로 확장하려고합니다.

즉, 나는 떠있는 관계를 만들고 싶습니다.

유형을 가진 Car 열을 추가하고 SELECT을 두 번 수행하여 구현할 수 있습니다. 1) 자동차 선택, 2) Car.Type 필드를 사용하여 추가 정보 선택. 그러나 그것은 끔찍한 해결책입니다. 나는 그것을 하나의 쿼리로 만들고 싶다.

아마 당신은 순수한 SQL의 솔루션을 알고, 너무 유용합니다. 고마워.

+1

다음을 참조하십시오 : https://docs.djangoproject.com/en/dev/topics/db/models/#multi-table- 상속 –

+1

및 SQL에서 수퍼 유형/하위 형식 관계를 정의하는이 대답 : http://stackoverflow.com/questions/1722741/defining-a-one-to-one-relationship-in-sql-server/1723519#1723519 –

답변

1

고객님의 특별한 요구 사항에 대해로 문의하지 않고 결정적인 답변을 드리기 란 매우 어렵습니다. 그러나 Django의 ORM에는이 작업을 수행 할 수 없습니다.

class Automobile(models.Model): 
    [...] 
    type = models.ChoiceField(choices=(
     ('car', 'Car'), 
     ('truck', 'Truck'), 
     ('bus', 'Bus'), 
    )) 

    @property 
    def detail(self): 
     return getattr(self, self.type) 

class Car(Automobile): 
    [...] 

class Truck(Automobile): 
    [...] 

class Bus(Automobile): 
    [...] 
: -

가 여기에 그것을 할 수있는 방법 의 나는 어떤 방법으로하지 않습니다는 방법 및 목표에 대한 자세한 설명이 주어진다면 뭔가 다른 추천 할 수 있다고 주장 있습니다 (https://docs.djangoproject.com/en/1.3/topics/db/models/#multi-table-inheritance

당신은 또한 또는 최상위 모델은 실제 테이블이 될하지 않을 수 있습니다 :

하면이 경로를 이동하는 경우, 당신은 멀티 테이블 상속에 대한 설명서를 읽고 싶은 것, 있는지 확인 위의 텍스트를 참조하십시오. 추상 모델 토론). 나는 당신에게 어떤 것을 사용하려고 하는지를 말할 수 없습니다 - 당신이하려고하는 것에 특정한 것입니다.

또한 Truck 유형의 자동차에 대한 버스 레코드를 저장하지 않도록 데이터 정확도를 적용하는 사용자 정의 신호가 필요할 수도 있습니다.

0

나는 당신이이 작업을 수행 할 수 있습니다 같아요

class Automobile(models.Model): 
    # ... 

class Truck(models.Model): 
    automobile = models.OneToOneField(Automobile, primary_key=True) 
    # ... 

class Bus(models.Model): 
    automobile = models.OneToOneField(Automobile, primary_key=True) 
    # ... 

여기에 몇 가지 설명 : OneToOneField reference

및 자세한 내용과 예제는 여기에서 찾을 수 있습니다 : One-to-one relationship example

+0

나는 http://stackoverflow.com/questions/7301981/extra-info-for-model-with-several-types/7313375#7313375가 동일하지만 더 원시적 인 방식으로한다고 생각한다. – Antigluk

관련 문제