2011-03-02 152 views
3

無論如何在Django中建模雙外鍵?Django中的雙重外鍵?

舉例來說,如果我有表:音頻,疊加,HTML 和表:timeline_item其中有一個字段id和字段類別指定音頻,疊加,或HTML ...

有誰知道我將如何去建模這個在Django?或者甚至有可能?

回答

8

聽起來像一個多態關聯。也許你可以用Django的泛型關係來解決你的問題,使用ContentTypes框架。

+0

我想我只是用錯誤的詞彙:),非常感謝,我可以用這個工作。 – ranman 2011-03-02 10:06:28

2

外鍵是TWO表之間的引用約束,因此您不能在3個不同的表上引用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和postgres現在都支持多表關係。我可以在普通的sql中做到這一點,它是如何在django中得到它,我遇到了麻煩。我喜歡你的解決方案,但它不像我希望使用的那樣高雅。 – ranman 2011-03-02 10:06:58