Coverage for servermodel/views.py: 98%

63 statements  

« 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 

4 

5from .models import Model 

6from .forms import Form, FormDisabled 

7from . import app_label 

8 

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 

16 

17from django.utils.translation import gettext as _ 

18 

19from django.urls import reverse_lazy 

20 

21 

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" 

30 

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") 

41 

42 

43class DetailView(LoginRequiredMixin, MultiTenantMixin, GenericUpdateView): 

44 template_name = "%s/detail.html" % app_label 

45 model = Model 

46 form_class = FormDisabled 

47 

48 

49class UpdateView( 

50 SuccessMessageMixin, LoginRequiredMixin, MultiTenantMixin, GenericUpdateView 

51): 

52 success_message = "%(name)s " + _("was updated successfully") 

53 

54 template_name = "%s/edit.html" % app_label 

55 model = Model 

56 

57 form_class = Form 

58 success_url = reverse_lazy("%s:index" % app_label) 

59 

60 

61class CreateView( 

62 SuccessMessageMixin, LoginRequiredMixin, MultiTenantMixin, GenericCreateView 

63): 

64 success_message = "%(name)s " + _("was created successfully") 

65 

66 template_name = "%s/edit.html" % app_label 

67 form_class = Form 

68 model = Model 

69 success_url = reverse_lazy("%s:index" % app_label) 

70 

71 def get_initial(self): 

72 from vendor.models import Model as VendorModel 

73 

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 

81 

82 

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) 

90 

91 

92class CSVExportView(GenericCSVExportView): 

93 model = Model 

94 filename = "servermodel.csv" 

95 export_fields = [ 

96 ("name", "name"), 

97 ("vendor", "vendor__name"), 

98 ]