2013-01-19 1 views
0

좋아, 다른 사람이 해결하기가 정말 쉽지만이 문제를 해결하는 방법에 대해 혼란스러워합니다.m2m과 외래 키가 포함 된 django 모델 도움말

시작하려면 모델 A에 특정 테이블에 대해 다 대다 관계가있는 여러 필드가 있습니다. 그래서 예를 들어

class A(models.Model): 
    field1 = models.ManyToMany('field1Collection') 
    field2 = models.ManyToMany(field2Collection') 

class field1Collection(models.Model): 
    description = models.TextField() 

class field2Collection(models.Model): 
    description = models.TextFIeld() 

어쨌든 이것은 내가 성취하려는 것입니다. 순위 시스템을 보유 할 수있는 또 다른 모델을 작성해야합니다. 그래서 예를 들어, 내가 정의 할 수 있습니다 레코드를 생성 할

나는 계급의 X 번호 (예 : 3)이 있습니다

  1. field1Collection 개체 3
  2. field2Collection 개체 6
  3. field1Collection 개체 2

그래서 기본적으로 내 field1Collection 및 field2Collection 테이블에서 개체를 선택하고 순위를 지정할 수 있기를 원합니다. 나는 foreignkeys와 m2m 필드를 사용하여 스키마를 생각해 보았습니다. 그러나 모델이 참조 할 필요가있는 시간의 "미리"알 필요가 있기 때문에 모두 잘못되었습니다. 이 말이 많은가요? 누구든지 도와 줄 수 있습니까?

답변

0

이 사용 GenericForeignKey 관계

from django.db import models 
from django.contrib.contenttypes.models import ContentType 
from django.contrib.contenttypes import generic 

class RankItem(models.Model): 
    rank = models.IntegerField() 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    def __unicode__(self): 
     return self.rank 

를 해결할 수있는 일반 외래 키 수있는 RankItem 모델은 외래 키를 사용하는 경우 하나만을 선택해야한다는 것을 의미 하나 개 다른 모델 만 "을 가리킨" 태그를 저장할 모델. contenttypes 응용 프로그램은이 문제를 해결하고 어떤 모델과도 관계가 있도록하는 특수 필드 유형을 제공합니다.

0

field1Collection 및 filed2Collection에는 foreignKey를 참조 할 수있는 공통 조상 클래스가 있어야합니다. 상속에 대한 django 문서를 참조하십시오.

+0

어떤 상속을 권장합니까? – asaji