Проблемы с типами содержимого при загрузке прибора в Django - PullRequest
99 голосов
/ 12 мая 2009

У меня проблемы с загрузкой приборов Django в базу данных MySQL из-за конфликтов типов содержимого. Сначала я попытался сбросить данные только из моего приложения следующим образом:

./manage.py dumpdata escola > fixture.json

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

./manage.py dumpdata contenttypes auth escola > fixture.json

Теперь проблема заключается в следующем нарушении ограничения при попытке загрузить данные в качестве тестового устройства:

IntegrityError: (1062, "Duplicate entry 'escola-t23aluno' for key 2")

Кажется, проблема в том, что Django пытается динамически воссоздать типы контента с различными значениями первичного ключа, которые конфликтуют со значениями первичного ключа из устройства. Это похоже на ошибку, описанную здесь: http://code.djangoproject.com/ticket/7052

Проблема в том, что рекомендуемый обходной путь - сбросить приложение contenttypes, которое я уже делаю !? Что дает? Если это имеет какое-то значение, у меня есть некоторые пользовательские разрешения модели, как описано здесь: http://docs.djangoproject.com/en/dev/ref/models/options/#permissions

Ответы [ 12 ]

1 голос
/ 14 октября 2011

Это очень, очень раздражает ... Меня это укушает каждый раз.

Я пытался сбросить данные с --exclude contenttypes и --natural, у меня всегда возникают проблемы ..

Что лучше всего подходит для меня, так это просто сделать truncate table django_content_type; после того, как syncdb и ТОГДА загрузят данные.

Конечно, для автозагрузки initial_data.json вам нужен шарик.

1 голос
/ 07 октября 2011

Я собираюсь дать еще один возможный ответ, который я только что понял. Может быть, это поможет ОП, может быть, это поможет кому-то еще.

У меня есть таблица отношений "многие ко многим". Он имеет первичный ключ и два внешних ключа для других таблиц. Я обнаружил, что если у меня есть запись в приборе, чьи два внешних ключа совпадают с другой записью, уже имеющейся в таблице с другим pk, она не будет выполнена. Таблицы отношений M2M имеют «уникальное вместе» для двух внешних ключей.

Так что, если нарушаются отношения M2M, посмотрите на добавляемые внешние ключи, посмотрите на вашу базу данных, чтобы увидеть, есть ли эта пара FK в списке под другим PK.

...