반응형
Django에서 새로운 사용자 지정 권한 추가
다음과 같이 Django 모델에서 사용자 지정 권한을 사용하고 있습니다.
class T21Turma(models.Model):
class Meta:
permissions = (("can_view_boletim", "Can view boletim"),
("can_view_mensalidades", "Can view mensalidades"),)
문제는 목록에 권한을 추가하면 auth_permissionsyncdb를 실행할 때 테이블에 추가되지 않는다는 것 입니다. 내가 도대체 뭘 잘못하고있는 겁니까. 차이가 나는 경우 데이터베이스 마이그레이션에 south를 사용하고 있습니다.
South는 django.contrib.auth 권한을 추적하지 않습니다. 자세한 내용은 티켓 # 211 을 참조하십시오.
티켓에 대한 의견 중 하나는 --allsyncdb 의 옵션 을 사용 하면 문제를 해결할 수 있다고 제안합니다 .
"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
그것은이다 장고 - 확장 것.
post_migrate마이그레이션 후 권한을 업데이트하기 위해 신호에 연결할 수 있습니다 . Dev with Passion 에서 약간 수정 되었고 원래 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()
참고 URL : https://stackoverflow.com/questions/1742021/adding-new-custom-permissions-in-django
반응형
'IT TIP' 카테고리의 다른 글
| SET READ_COMMITTED_SNAPSHOT ON은 얼마나 걸리나요? (0) | 2020.10.31 |
|---|---|
| Javascript가 모든 웹 페이지의 소스를 읽을 수 있습니까? (0) | 2020.10.31 |
| npm의 일반 종속성에 대한 bundledDependencies의 장점 (0) | 2020.10.31 |
| 패딩에만 배경색을 추가 할 수 있습니까? (0) | 2020.10.31 |
| 연속 배열과 비 연속 배열의 차이점은 무엇입니까? (0) | 2020.10.31 |