Coverage for servermodel/views.py: 98%
63 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +0000
1from django.contrib.auth.mixins import LoginRequiredMixin
2from sm.views import SafeDeleteMixin, GenericCSVExportView
3from sm.mixins import MultiTenantMixin, filter_queryset_by_tenant
5from .models import Model
6from .forms import Form, FormDisabled
7from . import app_label
9from vendor.models import Model as VendorModel
10from django.db.models import Prefetch
11from django.views.generic import ListView as GenericListView
12from django.views.generic.edit import UpdateView as GenericUpdateView
13from django.views.generic.edit import CreateView as GenericCreateView
14from django.views.generic.edit import DeleteView as GenericDeleteView
15from django.contrib.messages.views import SuccessMessageMixin
17from django.utils.translation import gettext as _
19from django.urls import reverse_lazy
22class ListView(LoginRequiredMixin, GenericListView):
23 template_name = "%s/list.html" % app_label
24 # Grouped list: rows are Vendors (with their servermodels prefetched), so
25 # the queryset model is the Vendor model, not this app's own Model.
26 model = VendorModel
27 paginate_by = 20
28 paginate_orphans = paginate_by / 4
29 ordering = "name"
31 def get_queryset(self):
32 qs = filter_queryset_by_tenant(VendorModel.objects.all(), self.request).filter(
33 is_hardware=True
34 )
35 servermodels = filter_queryset_by_tenant(Model.objects.all(), self.request)
36 qs = qs.prefetch_related(Prefetch("servermodel_set", queryset=servermodels))
37 if "srvmanager-show_empty" in self.request.COOKIES:
38 if self.request.COOKIES["srvmanager-show_empty"] == "false":
39 return qs.exclude(servermodel=None).order_by("name")
40 return qs.order_by("name")
43class DetailView(LoginRequiredMixin, MultiTenantMixin, GenericUpdateView):
44 template_name = "%s/detail.html" % app_label
45 model = Model
46 form_class = FormDisabled
49class UpdateView(
50 SuccessMessageMixin, LoginRequiredMixin, MultiTenantMixin, GenericUpdateView
51):
52 success_message = "%(name)s " + _("was updated successfully")
54 template_name = "%s/edit.html" % app_label
55 model = Model
57 form_class = Form
58 success_url = reverse_lazy("%s:index" % app_label)
61class CreateView(
62 SuccessMessageMixin, LoginRequiredMixin, MultiTenantMixin, GenericCreateView
63):
64 success_message = "%(name)s " + _("was created successfully")
66 template_name = "%s/edit.html" % app_label
67 form_class = Form
68 model = Model
69 success_url = reverse_lazy("%s:index" % app_label)
71 def get_initial(self):
72 from vendor.models import Model as VendorModel
74 initial = super().get_initial()
75 if "vendor" in self.kwargs:
76 vendor_qs = VendorModel.objects.filter(pk=self.kwargs["vendor"])
77 if hasattr(self, "request"):
78 vendor_qs = filter_queryset_by_tenant(vendor_qs, self.request)
79 initial["vendor"] = vendor_qs.first()
80 return initial
83class DeleteView(
84 SafeDeleteMixin, LoginRequiredMixin, MultiTenantMixin, GenericDeleteView
85):
86 success_message = "%(name)s " + _("was deleted successfully")
87 template_name = "delete.html"
88 model = Model
89 success_url = reverse_lazy("%s:index" % app_label)
92class CSVExportView(GenericCSVExportView):
93 model = Model
94 filename = "servermodel.csv"
95 export_fields = [
96 ("name", "name"),
97 ("vendor", "vendor__name"),
98 ]