有时候给某个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 了
那么我们可以写个 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 了
网友评论(0):


