Запрос на соответствие ContentType не существует в post_syncdb

StackOverflow https://stackoverflow.com//questions/11672976

Вопрос

Я пытаюсь добавить некоторые данные в базу данных, как только будут созданы таблицы, используя 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top