繁体   English   中英

Django的双外键?

[英]Double Foreign Key in Django?

无论如何在Django中建模双外键?

例如,如果我有表:audio,overlay,html和table:timeline_item,它有一个字段id,以及一个指定audio,overlay或html的字段类别......

有谁知道我会如何在Django中进行建模? 或者如果可能的话?

听起来像是多态关联。 也许你可以使用ContentTypes框架解决Django的泛型关系问题。

外键是两个表之间的引用约束,因此您实际上不能有一列引用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 %}

我最终做的是使用这个: http//docs.djangoproject.com/en/1.0/topics/db/models/#id7

在此之前,我正在使用类中定义的另一个方法,该方法需要2个外键,这些外键只是将字段字典映射到它们的类并返回该对象类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM