diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-09-05 10:41:24 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-10-24 12:06:08 +0200 |
commit | 40c94fba1a9e3e119af8738f75f1e8082feb0c8b (patch) | |
tree | 63a7d4c8f7cb34c6f4c0c9089bfafce00a46dfd8 /archaeological_finds/views.py | |
parent | e5568da593a5bc13ab2065ec22a2d6b035be756b (diff) | |
download | Ishtar-40c94fba1a9e3e119af8738f75f1e8082feb0c8b.tar.bz2 Ishtar-40c94fba1a9e3e119af8738f75f1e8082feb0c8b.zip |
Quick actions: generic urls, views and forms
Diffstat (limited to 'archaeological_finds/views.py')
-rw-r--r-- | archaeological_finds/views.py | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index 6c6d9fff9..034e1994f 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2018 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -21,7 +21,7 @@ import json from django.core.urlresolvers import reverse from django.db.models import Q -from django.http import HttpResponseRedirect, HttpResponse +from django.http import HttpResponseRedirect, HttpResponse, Http404 from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from django.views.generic import TemplateView @@ -594,3 +594,51 @@ def reset_wizards(request): 'treatmentfle_admacttreatmentfle_deletion'), ): wizard_class.session_reset(request, url_name) + + +class QAItemEditForm(IshtarMixin, LoginRequiredMixin, FormView): + template_name = 'ishtar/qa_form.html' + model = None + form_class = None + form_class_multi = None + + def dispatch(self, request, *args, **kwargs): + assert self.model + pks = [int(pk) for pk in kwargs.get('pks').split('-')] + self.items = list(self.model.objects.filter(pk__in=pks)) + if not self.items: + raise Http404() + + # check availability + if not self.model.QA_EDIT.is_available( + user=request.user, session=request.session): + for item in self.items: + if not self.model.QA_EDIT.is_available( + user=request.user, session=request.session, obj=item): + raise Http404() + + return super(QAItemEditForm, self).dispatch(request, *args, **kwargs) + + def get_form_class(self): + if len(self.items) > 1: + return self.form_class_multi + return self.form_class + + def get_form_kwargs(self): + kwargs = super(QAItemEditForm, self).get_form_kwargs() + kwargs['items'] = self.items + return kwargs + + +class QAFindForm(QAItemEditForm): + model = models.Find + form_class = QAFindFormSingle + form_class_multi = QAFindFormMulti + + def get_success_url(self, basket): + return reverse('select_itemsinbasket', + kwargs={'pk': basket}) + + def form_valid(self, form): + return HttpResponseRedirect(self.get_success_url( + form.cleaned_data['basket'])) |