2011-03-02 35 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