我目前正在向用户和群组添加权限,如下所示:
permissions = list(
Permission.objects.filter(
Q(codename='add_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
| Q(codename='change_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
| Q(codename='delete_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
| Q(codename='change_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
| Q(codename='add_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
| Q(codename='delete_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
| Q(codename='change_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
| Q(codename='add_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
| Q(codename='delete_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
)
)
some_user_obj.user_permissions = permissions
有更好的方法吗?也许没有查询?
答案 0 :(得分:3)
此解决方案的字符较少:
query=Q()
for app_labe, name in [
('bildverteiler', 'server'),
('bildverteiler', 'group'),
('auth', 'user')]:
query|=Q(content_type__app_label=app_label, content_type__name=name, codname__in=['%s_%s' % (perm_name, name) for perm_name in ['change', 'add', delete'])
Permission.objects.filter(query)