문제

다음과 같은 Django 모델에서 사용자 정의 권한을 사용하고 있습니다.

class T21Turma(models.Model):
    class Meta:
        permissions = (("can_view_boletim", "Can view boletim"),
                       ("can_view_mensalidades", "Can view mensalidades"),)

문제는 목록에 권한을 추가하면 추가되지 않는다는 것입니다. auth_permission syncdb를 실행할 때 테이블. 내가 뭘 잘못하고 있죠. 차이가 발생하면 데이터베이스 마이그레이션에 South를 사용하고 있습니다.

도움이 되었습니까?

해결책

South는 django.contrib.auth 권한을 추적하지 않습니다. 보다 티켓 #211 자세한 내용은.

티켓에 대한 의견 중 하나는 --all syncdb의 옵션은 문제를 해결할 수 있습니다.

다른 팁

"manage.py 마이그레이션"을 원한다면 모든 것을 수행하기 위해 (syncdb -all을 호출하지 않고) 마이그레이션으로 새로운 권한을 만들어야합니다.

user@host> manage.py datamigration myapp add_perm_foo --freeze=contenttypes --freeze=auth

생성 된 파일 편집 :

class Migration(DataMigration):

    def forwards(self, orm):
        "Write your forwards methods here."
        ct, created = orm['contenttypes.ContentType'].objects.get_or_create(
            model='mymodel', app_label='myapp') # model must be lowercase!
        perm, created = orm['auth.permission'].objects.get_or_create(
            content_type=ct, codename='mymodel_foo', defaults=dict(name=u'Verbose Name'))

이것은 나를 위해 효과가있었습니다.

./manage.py update_permissions

이것은 Django-Extensions 물건.

당신은 post_migrate 마이그레이션 후 권한을 업데이트하기 위해 신호. 약간 수정 된 다음 코드를 사용합니다 열정을 가진 개발자 그리고 원래 Django-Extensions.

# Add to your project-level __init__.py

from south.signals import post_migrate

def update_permissions_after_migration(app,**kwargs):
    """
    Update app permission just after every migration.
    This is based on app django_extensions update_permissions management command.
    """
    from django.conf import settings
    from django.db.models import get_app, get_models
    from django.contrib.auth.management import create_permissions

    create_permissions(get_app(app), get_models(), 2 if settings.DEBUG else 0)

post_migrate.connect(update_permissions_after_migration)

다음 코드로 마이그레이션을 실행할 때

ct, created = orm['contenttypes.ContentType'].objects.get_or_create(model='mymodel',     app_label='myapp') # model must bei lowercase!
perm, created = orm['auth.permission'].objects.get_or_create(content_type=ct, codename='mymodel_foo')

난로 오류가 발생합니다

File "C:\Python26\lib\site-packages\south-0.7.3-py2.6.egg\south\orm.py", line 170, in  __getitem__
raise KeyError("The model '%s' from the app '%s' is not available in this migration." % (model, app))
KeyError: "The model 'contenttype' from the app 'contenttypes' is not available in this migration."

이 오류를 방지하기 위해 코드를 수정했습니다

from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission

class Migration(DataMigration):

    def forwards(self, orm):
        "Write your forwards methods here."
        ct = ContentType.objects.get(model='mymodel', app_label='myapp') 
        perm, created = Permission.objects.get_or_create(content_type=ct, codename='mymodel_foo')
        if created:
            perm.name=u'my permission description'
            perm.save()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top