ContentType matching query does not exist on post_syncdb

三世轮回 提交于 2020-01-21 08:40:07

问题


I am trying to add add some data to the database as soon as tables are created, using the post_syncdb signal.

signals.post_syncdb.connect(init)

Then in the init function, I want to set permission, so I use

ct = ContentType.objects.get(app_label='news', model='Article')
Permission(name='Approve articles', codename='can_approve_article', content_type=ct)

But if I drop all the tables and run syncdb, I get

...
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.

Some tests I have done:

  • It works fine if I try this code outside syncdb.
  • It also works fine if I let syncdb create all the tables without this code, and then add this code and run syncdb without it having to make any changes.
  • AND I am pretty sure it used to work, but I changed a lot of things in other places since then, so I don't know where to start.
  • I get the same error for other models in different apps.
  • The signal is fired about 10 times, only the first few times throw the error.

Thanks a lot for any hints!


回答1:


Add this to the beginning of your init function:

 from django.contrib.contenttypes.management import update_all_contenttypes
 update_all_contenttypes() # make sure all content types exist


来源:https://stackoverflow.com/questions/11672976/contenttype-matching-query-does-not-exist-on-post-syncdb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!