2013-02-19 2 views
2

내 기본 클래스 모델 거래에서 설명, 가격, date_created 등의 특정 필드가 있습니다. 이제 하위 필드가있는 필드를 추가해야합니다. 예를 들어, 거래에 나이 필드를 추가하려고합니다. 이 나이 필드에는 하위 필드 (예 : score_for_kid, score_for_baby, score_for_old 등)가 있으며 관리자로부터이 점수를 편집하고 싶습니다. 이러한 연결 모델의Django : 모델 필드 내의 하위 필드

class Deals(models.Model): 
    description = models.TextField() 
    price = models.DecimalField(max_digits=7, decimal_places=2) 
    url = models.URLField(verify_exists=False) 
    currency = models.CharField(max_length=3) 
    created_date = models.DateField(auto_now_add=True) 

    kid_score = models.IntegerField(max_length=2,default=0) 
    teenager_score = models.IntegerField(max_length=2,default=0) 
    youth_score = models.IntegerField(max_length=2,default=0) 
    old_score = models.IntegerField(max_length=2,default=0) 

내가 (4 개 가지 분야에서 20 ~ 25 정도)이 모든 서브 필드를 저장하지 않는 대신 나이 필드 : 여기

내 models.py입니다 하위 필드. ManyToManyField가이 작업을 할 수 있습니까?

기본 요구 사항은 사용자가 브라우저에서 하위 필드 (예 : 키즈)를 선택하면 높은 점수를 가진 모든 개체가 표시된다는 것입니다.

나는 장고를 매우 신중하게 생각하며 이것에 대한 도움은 훌륭 할 것이다. 감사.

답변

0

귀하의 질문을 이해한다면 ForeignKey 필드를 사용해야합니다.

class Deals(models.Model): 
    description = models.TextField() 
    price = models.DecimalField(max_digits=7, decimal_places=2) 
    #... 
    age = models.ForeignKey(Age) 

class Age(models.Model): 
    kid_score = models.IntegerField(max_length=2,default=0) 
    teenager_score = models.IntegerField(max_length=2,default=0) 
    #... 

docs on Models을 잘 읽으십시오. 또한 관계형 데이터베이스/기본 SQL에 대한 내용을 읽는 것이 유용 할 수도 있습니다.

장고 관리자에서 개체를 편집 할 때 InlineModelAdmin 클래스를 사용하고 싶을 것입니다.

UPDATE

다시 읽는 당신은 단순히/표시 할 주요 거래 모델이 추가 필드를 숨길 수도 같은 질문을, 소리가 난다. 이 경우 관리자의 필드 집합을 '축소'클래스와 함께 사용하려고합니다. docs에 예가 있습니다.

Deal 레코드에 복수 kid_score이 연관되게하려면 외래 키가 필요합니다. 각 Dealkid_score 중 하나만있을 수 있으면 kid_score (및 기타) 필드를 기본 모델에 보관해야합니다 (혼란 스럽다면 SQL/관계형 데이터베이스에서 일부 독서를해야합니다).

+0

감사합니다. Aidan, 실제로 각 거래에 대해 kid_score (및 다른 점수)를 하나만 갖고 싶지만이 경우 25 개의 필드를 사용하면 모델이 복잡해질 것이라고 생각합니다. 위의 코드에서이 필드는 4 개 뿐이지 만 다른 필드에 대해서는 더 많은 필드가 있습니다. 나는 왜 내 모델에서 25 개의 필드를 모두 유지하는 것이 외래 키를 갖는 대신 나이를 먹는 것이 낫지는 모르겠다. 또한 'Age = models.ForeignKey (Deals)'을 내 Age 모델 클래스에 넣는 것이 나에게 잘 맞는다. 개념을 가져 주셔서 고맙습니다. 일단 내가 얻으면 꽤 부드럽습니다. –

+0

그렇다면 모든 것을 하나의 모델로 유지해야합니다. OneToOne 필드를 만들 수는 있지만 모든 거래 객체에 점수가 주어지면 이것이 올바른 솔루션이라고 생각하지 않습니다. html로 필드 숨기기를 표시하면됩니다. 이것은 ModelForms/Django Admin으로하기에는 너무 어렵지 않습니다. –

+0

예 각 거래 오브젝트에는 하나의 kid_score 등만 있으므로 거래 모델에 해당 필드를 추가하는 것이 좋습니다. 그러나, 내가 말했듯이, 나는 그러한 분야가 30 개가 넘는 많은 분야 (나이 6, 관계 10 등)를 가지고있다. 30-40 개의 필드가있는 모델이 쿼리 또는 기타 복잡한 작업을 느리게 실행하지 않습니까? 더 좋은 방법이 있고 더 빨리 만들 수 있습니까? –