vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

django update permissions on use >manage.py syncdb

17:09 , vkill
有时候给某个model加了些 permissions 上去,但是已经 syncdb 生成数据库表了,这样 permissions 就不能自动生成了
那么我们可以写个 post_syncdb 的 signal 来用
代码如下:(注:signal.py 直接丢在 项目根目录下去)

#signal.py
def update_permissions(sender, **kwargs):
    import settings
    import string
    from django.db.models.signals import post_syncdb
    for app in settings.INSTALLED_APPS:
        try:
            exec("from %s.models import *" % app)
        except:
            pass
    for content_type in ContentType.objects.all():
        for perm in eval("%s._meta.permissions" % string.capwords(content_type.name).replace(" ",'')):
            if not Permission.objects.filter(content_type=content_type, codename=perm[0]).exists():
                Permission.objects.create(content_type=content_type,
                                          codename=perm[0],
                                          name="%s" % perm[1]
                )
                print "Added '%s' permission for %s" % (perm[0], content_type.name)
post_syncdb.connect(update_permissions)


现在就可以使用 >manage.py syncdb 来更新 permissions 了
类别:python & django | Tags: , , , , , , | 0 条评论, 1851 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: