私はdjango django.contrib.auth.models.Permission
モデルに依存していますので、私のプロジェクトで何らかのリファクタリングを行っています。今まで私はpost_saveシグナルを使って新しいユーザごとにパーミッションを定義していましたので、ユーザが作成されたときにパーミッションをuser.user_permissions.add(the_permission)
で割り当てます。これは完全に動作します。カスタムpost_migrateシグナルを定義しています
今、モデルを使用して、ユーザーに必要な権限を明確にしたいと考えています。
これは私のコードです:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
from django.contrib.auth.models import Group, Permission
def create_group(name, permissions):
group = Group.objects.create(name=name)
[group.permissions.add(permission) for permission in permissions]
def define_company_groups(sender, **kwargs):
permissions = [
Permission.objects.get(codename='add_mymodel'),
Permission.objects.get(codename='change_mymodel'),
]
create_group('managers', permissions)
class MyAppConfig(AppConfig):
name = 'players'
verbose_name = 'The players app'
def ready(self):
post_migrate.connect(define_company_groups, sender=self)
は後に、このコードを定義し、私は、コール./manage.py migrate
後、このハンドラが解雇されるべきであることを期待しています。しかし、それは起こりませんが、私が得たすべては、次のとおりです。
Running post-migrate handlers for application players
Adding permission 'players | mymodel | Can add mymodel'
Adding permission 'companies | company | Can change mymodel'
Adding permission 'companies | company | Can delete company'
私は、彼らは、私は(どちらもmodels.py
ファイル内のコードを含む)management.py
という名前のファイル内の私のpost_migrateハンドラを定義する必要が言うこのhttps://groups.google.com/forum/#!topic/django-developers/8MdaWtJp4VQ記事を見つけることが、動作しません。
最後に、ここに私の質問があります:私のカスタムpost_migrateシグナルのコードはどこに置かなければいけませんか?
ありがとうございます。
Djangoに 'MyAppConfig'を使用するように教えてください。あなたの 'INSTALLED_APPS'設定で? – Alasdair
実際には、 'INSTALLED_APPS'タプルにアプリケーション名を追加するだけで十分ですか、別の設定を追加する必要がありますか? – slackmart