2011-03-02 3 views
3

Django에서 이중 외래 키를 모델링 할 수 있습니까? 오디오, 오버레이, HTML 테이블 : 필드 ID를 가지고 timeline_item, 오디오 지정하는 필드 카테고리, 오버레이, 또는 HTML ...Django의 이중 외래 키?

사람은 알고 있나요 내가 테이블이 있다면 예를 들어

어떻게 장고에서 이것을 모델링 할 것인가? 아니면 가능하다면?

답변

8

소리가 다형성 연관성과 유사합니다. 아마도 ContentTypes 프레임 워크를 사용하여 장고의 일반적인 관계에 대한 문제를 해결할 수있을 것입니다.

+0

나는 단지 잘못된 단어로 인터넷 검색을하고 있었다고 생각한다. :) 덕분에, 이것으로 작업 할 수있다. – ranman

2

외래 키가 TWO 테이블 사이의 참조 제한 조건이므로 다른 하나의 테이블에서 3 개의 열을 참조하는 열을 하나만 가질 수는 없습니다.

은 다음을 참조하십시오 http://en.wikipedia.org/wiki/Foreign_key

당신은 어떻게 든 다른 만들 감기, 내가 코드를 입증하는 가장 좋은 것입니다 믿습니다

class Category(models.Model): 
    TYPES = (
    ('audio', 'audio'), 
    ('overlay', 'overlay'), 
    ('html', 'html'), 
) 
    type = models.CharField(choices=TYPES) 

class Audio(models.Model): 
    category = models.OneToOneField(Category) 
    additional_column_for_audio = models. ... 
    #... 
# same for overlay and html 

class Item(models.Model): 
    # id is automatically added 
    category = models.ForeignKey(Category) 

은 다음 항목을 반복 할 수와 같은 것을 수행

{% for item in items %} 
    {% if item.category.type == "audio" %} 
    {{ item.category.audio.additional_column_for_audio }} 
    {% endif %} 
{% endfor %} 
+0

MySQL과 포스트그레스는 모두 다중 테이블 관계를 지원합니다. 나는 평범한 SQL에서 이것을 할 수 있는데, 문제가있는 장고에서 그것을 얻는 방법이다. 나는 당신의 해결책을 좋아하지만, 내가 사용하기를 기대했던 것만 큼 우아하지는 않습니다. – ranman