from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.http.response import HttpResponseRedirect
from django.urls import reverse
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView
from demo.forms import GalleryForm
from demo.models import DemoGallery
[docs]class GalleryCreateView(LoginRequiredMixin, CreateView):
form_class = GalleryForm
template_name = "form.html"
extra_context = {
"form_description": "Create a new gallery"}
[docs] def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form_description"] = "Create a new gallery"
return context
[docs] def get_success_url(self):
return reverse("gallery-update", kwargs={"pk": self.object.pk})
[docs]class GalleryUpdateView(UserPassesTestMixin, LoginRequiredMixin, UpdateView):
model = DemoGallery
form_class = GalleryForm
template_name = "form.html"
[docs] def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form_description"] = "Update gallery"
context["detail_view_url"] = reverse(
"gallery-detail", kwargs={"pk": self.object.pk})
return context
[docs] def test_func(self):
return (self.request.user == self.get_object().owner
or self.request.user.is_superuser)
[docs]class GalleryDetailView(DetailView):
# Anonymous user can visit this.
model = DemoGallery
[docs] def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form_description"] = "Gallery Detail"
context["update_view_url"] = reverse(
"gallery-update", kwargs={"pk": self.object.pk})
return context