Двойной внешний ключ в Django? - PullRequest
3 голосов
/ 02 марта 2011

Есть ли в Джанго моделирование двойных внешних ключей?

Например, если у меня есть таблицы: аудио, наложение, HTML и таблица: timeline_item, у которой есть идентификатор поля, и категория поля, которая указывает аудио, наложение или html ...

Кто-нибудь знает, как бы я смоделировал это в Джанго? или если это вообще возможно?

Ответы [ 3 ]

8 голосов
/ 02 марта 2011

Звучит как полиморфная ассоциация. Возможно, вы можете решить свою проблему с помощью общих отношений Django, используя ContentTypes framework.

2 голосов
/ 02 марта 2011

Внешний ключ является ссылочным ограничением между 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 голосов
/ 04 марта 2011

В итоге я использовал это: http://docs.djangoproject.com/en/1.0/topics/db/models/#id7

До этого я использовал другой метод, определенный в классе, который нуждался в 2 внешних ключах, которые просто отображали словарь полей в их классы и возвращали этот тип объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...