無論如何在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