summaryrefslogtreecommitdiff
path: root/postgresqleu/util/backendviews.py
diff options
context:
space:
mode:
authorMagnus Hagander2018-12-20 21:22:10 +0000
committerMagnus Hagander2018-12-20 21:22:10 +0000
commit993372a2f6201c5265f702424cb1a5cfcd444c30 (patch)
tree1689aa1b76d462b1ddebe581aa551a3b77cbed64 /postgresqleu/util/backendviews.py
parentb13cbdf2110045b56461ade849d21e1fc4af57dd (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.py24
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,
})