Должны ли таблицы ассоциации Django ManyToManyField иметь суррогатный ключ?

Я отображаю существующую структуру базы данных в модели Django. У меня есть структура "многие ко многим", в которой таблица ассоциаций имеет естественный ключ:

CREATE TABLE foo (id INTEGER PRIMARY KEY);
CREATE TABLE bar (id INTEGER PRIMARY KEY);
CREATE TABLE foo2bar (foo_id INTEGER REFERENCES foo(id),
                      bar_id INTEGER REFERENCES bar(id),
                      PRIMARY KEY (foo_id, bar_id)
                      );

Нет ли способа заставить Django ORM отобразить это? Должен ли я изменить foo2bar, чтобы использовать суррогатный ключ? Например.

CREATE TABLE foo2bar (id INTEGER PRIMARY KEY,
                      foo_id INTEGER REFERENCES foo(id),
                      bar_id INTEGER REFERENCES bar(id)
                      );
CREATE UNIQUE INDEX ix_foo2bar_uniq ON foo2bar (foo_id, bar_id);

person Gunnlaugur Briem    schedule 22.10.2009    source источник


Ответы (1)


Я не думаю, что Django - до версии 1.1 - позволяет использовать составные первичные ключи, как вы хотите.

См .: http://code.djangoproject.com/ticket/373.

Итак, я бы сказал, что если 1.2 (март 2010 г.?) Не реализует исправление для указанного выше билета, вам придется изменить таблицу базы данных.

person cethegeek    schedule 22.10.2009