add EnsureWritableCampMixin to villages
This commit is contained in:
parent
66f7b7ec2e
commit
e95cc5ea93
17
src/villages/mixins.py
Normal file
17
src/villages/mixins.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
from django.views.generic.detail import SingleObjectMixin
|
||||||
|
from django.contrib import messages
|
||||||
|
from django.shortcuts import redirect
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
class EnsureWritableCampMixin(SingleObjectMixin):
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
# do not permit view if camp is in readonly mode
|
||||||
|
if self.camp.read_only:
|
||||||
|
messages.error(request, "No thanks")
|
||||||
|
return redirect(reverse('village_list', kwargs={'camp_slug': self.camp.slug}))
|
||||||
|
|
||||||
|
# alright, continue with the request
|
||||||
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ Villages | {{ block.super }}
|
||||||
tent, chairs and tables in the shop!
|
tent, chairs and tables in the shop!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated and not camp.read_only %}
|
||||||
<a href="{% url 'village_create' camp_slug=camp.slug %}" class="btn btn-primary">Create a new {{ camp.title }} village</a>
|
<a href="{% url 'village_create' camp_slug=camp.slug %}" class="btn btn-primary">Create a new {{ camp.title }} village</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ from django.views.generic.detail import SingleObjectMixin
|
||||||
from .models import Village
|
from .models import Village
|
||||||
from camps.models import Camp
|
from camps.models import Camp
|
||||||
from camps.mixins import CampViewMixin
|
from camps.mixins import CampViewMixin
|
||||||
|
from .mixins import EnsureWritableCampMixin
|
||||||
|
from django.contrib import messages
|
||||||
|
|
||||||
|
|
||||||
class VillageListView(CampViewMixin, ListView):
|
class VillageListView(CampViewMixin, ListView):
|
||||||
|
@ -21,7 +23,7 @@ class VillageDetailView(CampViewMixin, DetailView):
|
||||||
context_object_name = 'village'
|
context_object_name = 'village'
|
||||||
|
|
||||||
|
|
||||||
class VillageCreateView(LoginRequiredMixin, CreateView):
|
class VillageCreateView(CampViewMixin, LoginRequiredMixin, EnsureWritableCampMixin, CreateView):
|
||||||
model = Village
|
model = Village
|
||||||
template_name = 'village_form.html'
|
template_name = 'village_form.html'
|
||||||
fields = ['name', 'description', 'private']
|
fields = ['name', 'description', 'private']
|
||||||
|
@ -51,7 +53,7 @@ class EnsureUserOwnsVillageMixin(SingleObjectMixin):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class VillageUpdateView(EnsureUserOwnsVillageMixin, LoginRequiredMixin, UpdateView):
|
class VillageUpdateView(CampViewMixin, EnsureUserOwnsVillageMixin, LoginRequiredMixin, EnsureWritableCampMixin, UpdateView):
|
||||||
model = Village
|
model = Village
|
||||||
queryset = Village.objects.not_deleted()
|
queryset = Village.objects.not_deleted()
|
||||||
template_name = 'village_form.html'
|
template_name = 'village_form.html'
|
||||||
|
@ -61,7 +63,7 @@ class VillageUpdateView(EnsureUserOwnsVillageMixin, LoginRequiredMixin, UpdateVi
|
||||||
return self.get_object().get_absolute_url()
|
return self.get_object().get_absolute_url()
|
||||||
|
|
||||||
|
|
||||||
class VillageDeleteView(EnsureUserOwnsVillageMixin, LoginRequiredMixin, DeleteView):
|
class VillageDeleteView(CampViewMixin, EnsureUserOwnsVillageMixin, LoginRequiredMixin, EnsureWritableCampMixin, DeleteView):
|
||||||
model = Village
|
model = Village
|
||||||
template_name = 'village_confirm_delete.html'
|
template_name = 'village_confirm_delete.html'
|
||||||
context_object_name = 'village'
|
context_object_name = 'village'
|
||||||
|
|
Loading…
Reference in a new issue