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.7 KiB
55 lines
1.7 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 = 'user_permissions',
|
|
|
|
|
|
class UserProfileForm(forms.ModelForm):
|
|
class Meta:
|
|
model = UserProfile
|
|
exclude = ('avatar',)
|