diff options
author | Magnus Hagander | 2018-12-20 21:22:10 +0000 |
---|---|---|
committer | Magnus Hagander | 2018-12-20 21:22:10 +0000 |
commit | 993372a2f6201c5265f702424cb1a5cfcd444c30 (patch) | |
tree | 1689aa1b76d462b1ddebe581aa551a3b77cbed64 /postgresqleu/util/backendviews.py | |
parent | b13cbdf2110045b56461ade849d21e1fc4af57dd (diff) |
Make it possible to assign values to multiple entries in one go
Initially, use this to make it possible to set the same track to
multiple sessions (often requested..) or to set the registration class
on multiple registration types. Framework is generic though, and can be
used for many more.
Diffstat (limited to 'postgresqleu/util/backendviews.py')
-rw-r--r-- | postgresqleu/util/backendviews.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/postgresqleu/util/backendviews.py b/postgresqleu/util/backendviews.py index d9863e91..a170589d 100644 --- a/postgresqleu/util/backendviews.py +++ b/postgresqleu/util/backendviews.py @@ -184,8 +184,31 @@ def backend_list_editor(request, urlname, formclass, resturl, allow_new=True, al objects = formclass.Meta.model.objects.all() else: objects = formclass.Meta.model.objects.filter(conference=conference) + + if request.method == "POST": + if request.POST.get('operation') == 'assign': + what = request.POST.get('what') + related = formclass.Meta.model._meta.get_field(what).related_model + setval = request.POST.get('assignid') + if setval: + setval = int(setval) + if not what in formclass.Meta.fields: + # Trying to update invalid field! + raise PermissionDenied() + with transaction.atomic(): + for obj in objects.filter(id__in=request.POST.get('idlist').split(',')): + if setval: + setattr(obj, what, related.objects.get(pk=setval)) + else: + setattr(obj, what, None) + obj.save() + return HttpResponseRedirect('.') + else: + raise Http404() + values = [{'id': o.pk, 'vals': [getattr(o, '_display_{0}'.format(f), getattr(o, f)) for f in formclass.list_fields]} for o in objects] + return render(request, 'confreg/admin_backend_list.html', { 'conference': conference, 'basetemplate': basetemplate, @@ -203,6 +226,7 @@ def backend_list_editor(request, urlname, formclass, resturl, allow_new=True, al 'allow_delete': allow_delete, 'allow_copy_previous': formclass.allow_copy_previous, 'allow_email': formclass.allow_email, + 'assignable_columns': formclass.get_assignable_columns(conference), 'breadcrumbs': breadcrumbs, 'helplink': formclass.helplink, }) |