簡體   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