post_syncdb上不存在ContentType匹配查询

时间:2012-07-26 15:40:05

标签: django signals syncdb contenttype

我正在尝试使用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次,只有前几次发出错误。

非常感谢任何提示!

1 个答案:

答案 0 :(得分:7)

将其添加到init函数的开头:

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