私は指示に従い、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デバッガーを使用すると、その特定の時点ではアクセス許可がないようです。同じアプリ内のモデル用に標準のアクセス許可も作成されています。
誰かがアドバイスできますか?
-----------------------更新-------------------------- -
クリスのコメントの後、私はディスパッチャークラスを見て、詳細を理解するために関連ファイルにデバッグメッセージを挿入しました。
基本的に、私のアプリ(およびよりもリストのさらに下にありますINSTALLED_APPS
)では、そのハンドラーが最初にシグナルに追加されました。セットアップ中に、Djangoがアプリのmanagement / commandsフォルダー内にインストールするカスタムコマンドを探し、management /init.py内のシグナルハンドラーが実行されたことが判明しました。contenttype
auth
post_syncdb
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/prop
erty_buyer / haystack_sites.py'、2、''、[' haystack.autodiscover()\ n']、0 )、(、'/Users/foo/.virtualenvs /prop
erty / lib / python2.6 / site-packages / django / utils / importlib.py'、35、'import_module'、[' import(name)\ n' ]、0)、(、'/ Us
ers /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)、
これが、ハンドラーが順序に依存し、同様のケースに遭遇する人々に役立つことを願っています