Записки разработчика

07.11.2017

Django Ошибка дампа данных Matching query does not exist

Поделюсь решением проблемы возникающей при попытке сделать дамп данных проекта:

Выполняя команду:

(env)➜  myproject git:(master) ✗ python project/manage.py dumpdata --natural-foreign --exclude auth.permission --exclude contenttypes --exclude admin.logentry --indent 4 > dump.json

Получил ответ:

CommandError: Unable to serialize database: MyModel matching query does not exist.

Где MyModel — имя модели, в моём случае это была AccountUser.

Ошибка сравнительно не информативная, гугление ничего особого не дало. Пришлось залезть в код фреймворка Django, в частности в ту часть где происходит дамп данных:

cd ../env/lib/python2.7/site-packages/django/core/management/commands
vi dumpdata.py

Видим что исключение выбрасывается на 208 строке:

raise CommandError("Unable to serialize database: %s" % e)

Пришлось закомментировать блок чтобы вываливало ошибку а не обрабатывало исключение. В итоге получаю по бэктрейсу (backtrace) ошибки вижу что проблема в django/db/models/query.py в исключении DoesNotExist с описанием : «matching query does not exist»

Вывожу разные переменные (print не работает), через это описание ошибки. Видно что всё по нулям. В итоге вывел self.query.

Он мне вывел запрос — который — я его выполнил в sql — выдал что да, этот запрос выдает результат нуль записей, из-за чего ошибка, собственно, и генерируется.

А дело всё в том, что у меня есть связанная таблица через ForeignKey (другая, скажем AccountCompany), и так получилось что там есть записи, которые ссылаются на AccountUser, но в AccountUser таких записей уже нет.

В общем, почистил вторую таблицу, «брошенных» записей нет, и вуаля! Дамп происходит как и должен. Не забудьте только убирать ваши изменения в библиотеках.

admin @ 02:50


 

Powered by WordPress