From 993372a2f6201c5265f702424cb1a5cfcd444c30 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 20 Dec 2018 22:22:10 +0100 Subject: 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. --- postgresqleu/util/backendviews.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'postgresqleu/util/backendviews.py') 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, }) -- cgit v1.2.3