无论如何在Django中建模双外键?Django中的双重外键?
举例来说,如果我有表:音频,叠加,HTML 和表:timeline_item其中有一个字段id和字段类别指定音频,叠加,或HTML ...
有谁知道我将如何去建模这个在Django?或者甚至有可能?
无论如何在Django中建模双外键?Django中的双重外键?
举例来说,如果我有表:音频,叠加,HTML 和表:timeline_item其中有一个字段id和字段类别指定音频,叠加,或HTML ...
有谁知道我将如何去建模这个在Django?或者甚至有可能?
听起来像一个多态关联。也许你可以用Django的泛型关系来解决你的问题,使用ContentTypes框架。
外键是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 %}
MySQL和postgres现在都支持多表关系。我可以在普通的sql中做到这一点,它是如何在django中得到它,我遇到了麻烦。我喜欢你的解决方案,但它不像我希望使用的那样高雅。 – ranman 2011-03-02 10:06:58
我最终什么事就是用这个做: http://docs.djangoproject.com/en/1.0/topics/db/models/#id7
在那之前我是用在需要的只是映射领域他们班的字典和返回对象类型2个的外键的类定义的另一个方法。
我想我只是用错误的词汇:),非常感谢,我可以用这个工作。 – ranman 2011-03-02 10:06:28