2014-09-01 3 views
0

의 내가 이런 Cars, CarTypes, 그들의 BuildDates 있다고 가정 해 봅시다 :장고에서 데이터베이스 필드를 변경하지 못하게하려면 어떻게해야합니까?

class Car(db.models): 
    licence_name = models.CharField(max_length=64) 
    car_type = models.ForeignKey(Type) 

class Type(db.models): 
    name = models.CharField(max_length=64) 
    build_during = models.ForeignKey(BuildDate) 

class BuildDate(db.models): 
    begin = models.DateField(null=True) 
    end = models.DateField(null=True) 

    class Meta(object): 
     unique_together = (('begin', 'end'),) 

나는 별도의 테이블에 BuildDates을 갖고 싶어 그런 내가 장고 - 외부 도구를 사용하여 빠른 쿼리 및 기타 물건을 할 수 있습니다. BuildDates 고유하지만 CarTypes 공유하기 때문에

, 나는이 있는지 확인하려면 다음 BuildDated0 하나 CarTypet1의가 변경되면, 다른 CarTypes은 영향을받지 않으며 그들은 여전히 ​​동일한 BuildDate d0을 공유 -하지만 t1을 가진 현재는 d1입니다. 그 CarTypet1에 대해 BuildDated1을 새로 작성해야한다고 생각합니다. 이를위한 권장 또는 권장 방법이 있습니까?

+0

어떻게 더 빠른 쿼리를 산출하는데 별개의 모델을 가지고있다? 몇 가지 사례를 공유하려면 어떻게해야하나요? –

+0

SELECT cards_car.id FROM cars_car, cars_type, cars_builddate cars_builddate.begin> = x 및 cards_builddate.end <= y 및 cars_car.type == cars_type.id 및 cars_type.build_during = cars_builddates.id – AME

+0

오류 ... 당신은 * * 정말 ** 내부 조인을 추가하면 ** 실제로 ** 쿼리가 빨라질 것입니다. 그렇다면 어떤 SQL 데이터베이스를 사용하고 있는지 알고 싶습니다. 내가 아는 한, 조인을 추가함으로써 그러한 결과를 보지 못했습니다. 사실, 조인을 제거하여 성능을 위해 원 자성을 교환하는 "비정규 화"라는 작은 게임조차도 있습니다 ... –

답변

0

"편집 가능"속성을 사용하십시오. "False"로 설정하면 요소가 관리자에게 표시되지 않습니다. 즉, 값을 변경할 수 없습니다.

licence_name = models.CharField (MAX_LENGTH = 64, 편집 = 거짓)

관련 문제