Запрос на соответствие ContentType не существует в post_syncdb
-
12-12-2019 - |
Вопрос
Я пытаюсь добавить некоторые данные в базу данных, как только будут созданы таблицы, используя post_syncdb
сигнал.
signals.post_syncdb.connect(init)
Затем в функции init я хочу установить разрешение, поэтому я использую
ct = ContentType.objects.get(app_label='news', model='Article')
Permission(name='Approve articles', codename='can_approve_article', content_type=ct)
Но если я удалю все таблицы и запущу syncdb
, я получаю
...
File "...\base\functions\init.py", line 11, in init
ct = ContentType.objects.get(app_label='news', model='Article')
...
django.contrib.contenttypes.models.DoesNotExist: ContentType matching query does not exist.
Некоторые тесты, которые я провел:
- Это прекрасно работает, если я попробую этот код снаружи
syncdb
. - Это также прекрасно работает, если я позволю
syncdb
создайте все таблицы без этого кода, а затем добавьте этот код и запустите syncdb без необходимости вносить какие-либо изменения. - И я почти уверен, что раньше это работало, но с тех пор я многое изменил в других местах, так что я не знаю, с чего начать.
- Я получаю ту же ошибку для других моделей в разных приложениях.
- Сигнал подается около 10 раз, только первые несколько раз выдает ошибку.
Большое спасибо за любые подсказки!
Решение
Добавьте это в начало вашей функции init:
from django.contrib.contenttypes.management import update_all_contenttypes
update_all_contenttypes() # make sure all content types exist
Не связан с StackOverflow