You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

55 lines
1.8 KiB

# -*- coding: utf-8 -*-
from guardian.forms import UserObjectPermissionsForm
from guardian.shortcuts import assign_perm, remove_perm
from django import forms
from .models import UserProfile
class MyUserObjectPermissionsForm(UserObjectPermissionsForm):
def __init__(self, *args, **kwargs):
super(MyUserObjectPermissionsForm, self).__init__(*args, **kwargs)
self.fields['permissions'].widget.attrs.update({
'size': 15
})
def save_obj_perms(self):
"""
Saves selected object permissions by creating new ones and removing
those which were not selected but already exists.
Should be called *after* form is validated.
"""
perms = set(self.cleaned_data[self.get_obj_perms_field_name()])
model_perms = set((c[0] for c in self.get_obj_perms_field_choices()))
init_perms = set(self.get_obj_perms_field_initial())
to_remove = (model_perms - perms) & init_perms
for perm in to_remove:
remove_perm(perm, self.user, self.obj)
for perm in perms - init_perms:
assign_perm(perm, self.user, self.obj)
class AvatarChangeForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('avatar',)
class UserPermissionsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserPermissionsForm, self).__init__(*args, **kwargs)
self.fields['user_permissions'].widget.attrs.update({
'size': 35
})
class Meta:
model = UserProfile
fields = ('avatar', 'password', 'groups', 'user_permissions', 'responsibility_groups', 'is_superuser')
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
exclude = ('avatar', 'password', 'groups', 'user_permissions', 'responsibility_groups')