Джанго: столкновение названия модели - PullRequest
3 голосов
/ 24 июня 2009

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

Я пытался использовать:

    class Meta:
        db_table = "db_name"

но это не сработало. Я все еще получаю ошибку конфликта имени поля в syncdb. Любые предложения.

Обновление

На самом деле я пытаюсь интегрировать Satchmo с Pinax. И ошибка:

Ошибка: одна или несколько моделей не прошли проверку:

contact.contact: Accessor для поля 'user' конфликтует с соответствующим полем m2m 'User.contact_set'. Добавьте аргумент related_name в определение для пользователя.

friends.contact: Accessor для поля m2m 'users' конфликтует со связанным полем User.contact_set '. Добавьте аргумент related_name в определение для «users».

Вы правы, имена таблиц уже уникальны. Я проанализировал модель, и модель «Контакт» представлена ​​в двух моделях двух разных приложений. Когда я закомментирую одну из этих моделей, она работает нормально.

Возможно, ошибка в том, что оба приложения находятся в PYTHON_PATH, и когда другое приложение определяет свою модель с таким же именем, происходит конфликт.

1 Ответ

6 голосов
/ 25 июня 2009

Проблема в том, что и у Satchmo, и у Pinax есть модель Contact с ForeignKey to User. Django пытается добавить атрибут обратной связи «contact_set» к пользователю для каждого из этих ForeignKeys, поэтому возникает конфликт.

Решение состоит в том, чтобы добавить что-то вроде related_name = "pinax_contact_set" в качестве аргумента для ForeignKey в модели контактов Pinax или аналогичным образом в модели контактов Satchmo. Это потребует редактирования источника непосредственно для одного или другого. Возможно, вам удастся найти способ сделать это с помощью обезьяньего патча, но я ожидаю, что это будет сложно.

...