Coverage for clustersoftware/views.py: 98%

57 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, GenericBulkDeleteView 

3from sm.mixins import MultiTenantMixin, BulkActionMixin, filter_queryset_by_tenant 

4 

5from .models import Model 

6from .forms import Form, FormDisabled 

7from . import app_label 

8 

9from django.views.generic import ListView as GenericListView 

10from django.views.generic.edit import UpdateView as GenericUpdateView 

11from django.views.generic.edit import CreateView as GenericCreateView 

12from django.views.generic.edit import DeleteView as GenericDeleteView 

13from django.contrib.messages.views import SuccessMessageMixin 

14 

15from django.utils.translation import gettext as _ 

16 

17from django.urls import reverse_lazy 

18 

19 

20class ListView(LoginRequiredMixin, MultiTenantMixin, BulkActionMixin, GenericListView): 

21 template_name = "%s/list.html" % app_label 

22 model = Model 

23 paginate_by = 20 

24 paginate_orphans = paginate_by / 4 

25 ordering = "name" 

26 

27 def get_queryset(self): 

28 return super().get_queryset().order_by("name") 

29 

30 

31class DetailView(LoginRequiredMixin, MultiTenantMixin, GenericUpdateView): 

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

33 model = Model 

34 form_class = FormDisabled 

35 

36 

37class UpdateView( 

38 SuccessMessageMixin, LoginRequiredMixin, MultiTenantMixin, GenericUpdateView 

39): 

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

41 

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

43 model = Model 

44 

45 form_class = Form 

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

47 

48 

49class CreateView( 

50 SuccessMessageMixin, LoginRequiredMixin, MultiTenantMixin, GenericCreateView 

51): 

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

53 

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

55 form_class = Form 

56 model = Model 

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

58 

59 def get_initial(self): 

60 from vendor.models import Model as VendorModel 

61 

62 initial = super().get_initial() 

63 if "vendor" in self.kwargs: 

64 vendor_qs = VendorModel.objects.filter(pk=self.kwargs["vendor"]) 

65 if hasattr(self, "request"): 

66 vendor_qs = filter_queryset_by_tenant(vendor_qs, self.request) 

67 initial["vendor"] = vendor_qs.first() 

68 return initial 

69 

70 

71class DeleteView( 

72 SafeDeleteMixin, LoginRequiredMixin, MultiTenantMixin, GenericDeleteView 

73): 

74 success_message = "%(name)s " + _("was deleted successfully") 

75 template_name = "delete.html" 

76 model = Model 

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

78 

79 

80class BulkDeleteView(GenericBulkDeleteView): 

81 model = Model 

82 

83 

84class CSVExportView(GenericCSVExportView): 

85 model = Model 

86 filename = "clustersoftware.csv" 

87 export_fields = [ 

88 ("name", "name"), 

89 ("version", "version"), 

90 ("vendor", "vendor__name"), 

91 ]