Add page permissions formset to group edit view

This commit is contained in:
Nick Smith 2014-07-07 14:38:11 +01:00
parent 7fcfff65bf
commit 2e3d0fd03c
3 changed files with 28 additions and 3 deletions

View file

@ -6,7 +6,7 @@ from django.contrib.auth.models import Group, Permission
from wagtail.wagtailadmin import hooks
from wagtail.wagtailusers.models import UserProfile
from wagtail.wagtailcore.models import UserPagePermissionsProxy
from wagtail.wagtailcore.models import UserPagePermissionsProxy, GroupPagePermission
User = get_user_model()
@ -187,6 +187,18 @@ class GroupForm(forms.ModelForm):
return group
class GroupPagePermissionForm(forms.ModelForm):
class Meta:
model = GroupPagePermission
fields = ('page', 'permission_type')
class BaseGroupPagePermissionFormSet(forms.models.BaseInlineFormSet):
def __init__(self, *args, **kwargs):
super(BaseGroupPagePermissionFormSet, self).__init__(*args, **kwargs)
self.form = GroupPagePermissionForm
class NotificationPreferencesForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NotificationPreferencesForm, self).__init__(*args, **kwargs)

View file

@ -15,6 +15,7 @@
<ul class="fields">
{% include "wagtailadmin/shared/field_as_li.html" with field=form.name %}
{% format_permissions permission_bound_field=form.permissions %}
{{ formset }}
<li><input type="submit" value="{% trans 'Save' %}" /></li>
</ul>
</div>

View file

@ -6,9 +6,11 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib import messages
from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers
from django.forms.models import inlineformset_factory
from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailusers.forms import GroupForm
from wagtail.wagtailusers.forms import GroupForm, BaseGroupPagePermissionFormSet
from wagtail.wagtailcore.models import GroupPagePermission
from wagtail.wagtailcore.compat import AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME
User = get_user_model()
@ -97,18 +99,28 @@ def create(request):
@permission_required(change_user_perm)
def edit(request, group_id):
group = get_object_or_404(Group, id=group_id)
GroupPagePermissionFormSet = inlineformset_factory(
Group,
GroupPagePermission,
formset=BaseGroupPagePermissionFormSet,
extra=0
)
if request.POST:
form = GroupForm(request.POST, instance=group)
if form.is_valid():
formset = GroupPagePermissionFormSet(request.POST, instance=group)
if form.is_valid() and formset.is_valid():
group = form.save()
formset.save()
messages.success(request, _("Group '{0}' updated.").format(group))
return redirect('wagtailusers_groups_index')
else:
messages.error(request, _("The group could not be saved due to errors."))
else:
form = GroupForm(instance=group)
formset = GroupPagePermissionFormSet(instance=group)
return render(request, 'wagtailusers/groups/edit.html', {
'group': group,
'form': form,
'formset': formset,
})