我按照说明在里面创建了我的 post_syncdb 信号app/management/__init__.py
:
from django.db.models.signals import post_syncdb
from django.contrib.auth.models import Group, Permission
import payment.models as payModels
def initialization(sender, **kwargs):
""" initialization when appliation starts """
agents = Group.objects.get(name = "agents")
import pdb
pdb.set_trace()
if not agents.permissions.filter(codename="can_buy_package").exists():
perm = Permission.objects.get(codename="can_buy_package")
agents.permissions.add(perm)
post_syncdb.connect(initialization, sender= payModels)
信号运行,但在那里使用 python 调试器,似乎在那个特定时间没有权限,即使是标准权限也是为我在同一个应用程序中的模型创建的。
有人可以建议吗?
-----------------------更新-------------- -
在 Chris 发表评论后,我查看了调度程序类并将调试消息插入到相关文件中以了解更多信息。
本质上,在我的应用程序中(在列表中INSTALLED_APPS
比contenttype
和更靠后的位置auth
),它的post_syncdb
处理程序首先被添加到信号中。原来是因为在安装过程中,Django 会在应用程序的 management/commands 文件夹中查找要安装的自定义命令,我的 management/ init .py 中的信号处理程序已执行。
然后我试着把post_syncdb.connect
我的models.py
. 运行跟踪显示使用 haystack 也可能遇到类似问题
(, '/Users/foo/.virtualenvs/property/lib/python2.6/site-packages/django/utils/importlib.py', 35, 'import_module', [' import (name)\n '], 0 ), (, '/Users/foo/.virtualenvs/property/lib/python2.6/site-packages/haystack/init .py', 121, 'autodiscove r', [' importlib.import_module
("%s.search_indexes " % app)\n'], 0), (, '
/Users/foo/Documents/workspace/property_buyer/haystack_sites.py', 2, '', ['haystack.autodiscover()\n'], 0 ), (, '/Users/foo/.virtualenvs/property/lib/python2.6/site-packages/django/utils/importlib.py
', 35, 'import_module', [' import (name)\n' ], 0), (, '/
Users/foo/.virtualenvs/property/lib/python2.6/site-packages/haystack/ init.py', 151, 'handle_registrations', [' search_sites_conf = importlib
.import_module(settings.HAYSTACK_SITECONF)\n'], 0), (, '/Users/foo/.virtualenvs/property/lib/python2.6/site -packa ges
/haystack/ init .py', 154, '', ['handle_registrations()\n'], 0), (, '/Users/foo/.virtualenvs/propert
y/lib/python2.6/site -packages/django/utils/importlib.py', 35, 'import_module', [' import (name)\n'], 0),
希望这对那些处理程序依赖于订单并遇到类似情况的人有用