use*_*478 70 django django-south django-permissions
我在我的Django模型中使用自定义权限,如下所示:
class T21Turma(models.Model):
class Meta:
permissions = (("can_view_boletim", "Can view boletim"),
("can_view_mensalidades", "Can view mensalidades"),)
Run Code Online (Sandbox Code Playgroud)
问题是,当我向列表添加权限auth_permission时,当我运行syncdb时,它不会被添加到表中.我究竟做错了什么.如果它有任何区别我在南方使用数据库迁移.
gue*_*tli 48
如果您希望"manage.py migrate"执行所有操作(不调用syncdb --all).您需要使用迁移创建新权限:
user@host> manage.py datamigration myapp add_perm_foo --freeze=contenttypes --freeze=auth
Run Code Online (Sandbox Code Playgroud)
编辑创建的文件:
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'))
Run Code Online (Sandbox Code Playgroud)
wou*_*dnt 27
这对我有用:
./manage.py update_permissions
Run Code Online (Sandbox Code Playgroud)
这是一个django扩展的事情.
Veb*_*osa 20
您可以连接到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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31736 次 |
| 最近记录: |