2015-03-04 3 views
1

ну, я реализую функцию множественного db в существующем проекте django. После того, как я создаю и настраиваю вторичный db для django, первое, что я сделал, это запустить syncdb и migrate, что создаст множество встроенных таблиц django, включая таблицу django_content_type.Django Multiple DB с таблицей Contenttype

Тогда я понимаю, что записи в новой таблице django_content_type отличаются от записей в первичной db. Чтобы быть более конкретным, первичный ключ отличается.

Скажем, у меня есть запись в главной таблице БД django_content_type выглядит следующим образом:

id | name | app_label | model 
----+------+-----------+------- 
33 | Tag | taggit | tag 

Однако после SyncDB и запущенных миграций, я получил следующее в моем вторичном дб:

id | name | app_label | model 
----+------+-----------+------- 
11 | Tag | entities | tag 

I вид ненависти, чтобы иметь два непоследовательных django_content_type, сидящих в моих двух db. Я попытался обрезать один из них и загрузить приспособление из другого и потерпел неудачу, поскольку таблица django_content_type ссылается на большинство других таблиц.

Что такое лучший способ справиться с такими вещами? Я пытаюсь убедить себя, что это не имеет значения, но я боюсь, что несоответствие укусит меня в будущем, поэтому я действительно хочу решить эту проблему.

Заранее спасибо.

ответ

2

Это обычная проблема, так как вы используете разные базы данных. Основная проблема здесь заключается в том, что некоторые модели используют ContentType в качестве поля, которое будет переведено в FK, например content_type_object_id, в базу данных, и когда они отличаются в базах данных, это может привести к ошибке. Поэтому, так как вам нужно две базы данных в вашем приложении, вы должны менеджер ваши звонки с помощью db_manager() не using()

Например:

В приложении, это может привести к ошибке

ContentType.objects.get_for_model(Tag) 

Поскольку вы используете метод менеджера get_for_model(), и вам нужно указать базу данных раньше.

ContentType.objects.db_manager(...).get_for_model(Tag) 

Таким образом, вы убедитесь, что вы получаете ContentType на основе ПК, которые были рассмотрены в указанной базе данных.


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

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

+0

Кажется разумным ответом, хотя я действительно хочу получить эти pk-совместимые перекрестные базы данных. Я буду копать глубже и посмотреть, есть ли решение. Спасибо. –

Смежные вопросы