-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathviews.py
110 lines (76 loc) · 3.16 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from django.core.urlresolvers import reverse
from django.views.generic import CreateView, ListView, DetailView, UpdateView
from django.views.generic.edit import ModelFormMixin
from extra_views import ModelFormSetView
from .forms import ExpositionForm, EditExpositionForm, \
PositionsFormSet, PlantForm
from .models import Exposition, Plant, PlantPosition
class EditExpositionMixin(object):
def get_success_url(self):
return reverse('exposition_detail',
kwargs={'pk': self.get_object().pk})
class CreateExpositionView(CreateView):
model = Exposition
template_name = 'exposition_management/create_exposition.html'
form_class = ExpositionForm
def form_valid(self, form):
exposition = form.save(commit=False)
exposition.stage = Exposition.STAGE_PLANT_SELECTION
exposition.save()
return super(ModelFormMixin, self).form_valid(form)
def get_success_url(self):
return reverse('exposition_list')
class AddPlantsToExpositionView(EditExpositionMixin, UpdateView):
model = Exposition
template_name = 'exposition_management/add_plants_to_exposition.html'
form_class = EditExpositionForm
def form_valid(self, form):
exposition = form.save(commit=False)
plants = form.cleaned_data['plants']
PlantPosition.objects.filter(exposition=exposition).delete()
for p in plants:
relation = PlantPosition(exposition=exposition, plant=p)
relation.save()
exposition.stage = exposition.STAGE_DESIGN
exposition.save()
return super(ModelFormMixin, self).form_valid(form)
class EditPositionsView(ModelFormSetView):
template_name = 'exposition_management/move_plants.html'
model = PlantPosition
def get_queryset(self):
pk = self.kwargs['pk']
return super(EditPositionsView, self).get_queryset().filter(
exposition=pk)
def get_formset(self):
return PositionsFormSet
def get_context_data(self, **kwargs):
exposition = Exposition.objects.get(pk=self.kwargs['pk'])
context = {'exposition': exposition}
context.update(**kwargs)
return super(EditPositionsView, self).get_context_data(**context)
def formset_valid(self, formset):
exposition = Exposition.objects.get(pk=self.kwargs['pk'])
exposition.stage = exposition.STAGE_ACTIVE
exposition.save()
return super(EditPositionsView, self).formset_valid(formset)
def get_success_url(self):
return reverse('exposition_detail', kwargs={'pk':self.kwargs['pk']})
class ExpositionListView(ListView):
model = Exposition
@property
def queryset(self):
return Exposition.objects.exclude(stage=Exposition.STAGE_ARCHIVED)
class ExpositionListArchiveView(ListView):
model = Exposition
@property
def queryset(self):
return Exposition.objects.filter(stage=Exposition.STAGE_ARCHIVED)
class ExpositionDetailView(DetailView):
model = Exposition
class AddPlantView(CreateView):
model = Plant
form_class = PlantForm
def get_success_url(self):
return reverse('plant_list')
class PlantListView(ListView):
model = Plant