Coverage for webpage/utils.py: 65%
82 statements
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-27 11:19 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-27 11:19 +0000
1import django_filters
2from django.views.generic.edit import CreateView, UpdateView
3from crispy_forms.helper import FormHelper
4from crispy_forms.layout import Submit, Layout, Fieldset, Div, MultiField, HTML
5from django_tables2 import SingleTableView, RequestConfig
8def serialize(modelclass):
9 """returns the field values of a model as list"""
10 fields = modelclass._meta.get_fields()
11 serialized = []
12 for x in fields:
13 if x.get_internal_type() == "ManyToManyField":
14 attrs = getattr(modelclass, x.name)
15 values = "|".join([y[1] for y in attrs.values_list()])
16 key_value = values
17 else:
18 key_value = getattr(modelclass, x.name)
19 serialized.append(key_value)
20 return serialized
23class GenericFilterFormHelper(FormHelper):
24 def __init__(self, *args, **kwargs):
25 super(GenericFilterFormHelper, self).__init__(*args, **kwargs)
26 self.helper = FormHelper()
27 self.form_class = "genericFilterForm"
28 self.form_method = "GET"
29 self.helper.form_tag = False
30 self.add_input(Submit("Filter", "Search"))
33django_filters.filters.LOOKUP_TYPES = [
34 ("", "---------"),
35 ("exact", "Is equal to"),
36 ("iexact", "Is equal to (case insensitive)"),
37 ("not_exact", "Is not equal to"),
38 ("lt", "Lesser than/before"),
39 ("gt", "Greater than/after"),
40 ("gte", "Greater than or equal to"),
41 ("lte", "Lesser than or equal to"),
42 ("startswith", "Starts with"),
43 ("endswith", "Ends with"),
44 ("contains", "Contains"),
45 ("icontains", "Contains (case insensitive)"),
46 ("not_contains", "Does not contain"),
47]
50class GenericListView(SingleTableView):
51 filter_class = None
52 formhelper_class = None
53 context_filter_name = "filter"
54 paginate_by = 25
55 template_name = "browsing/generic_list.html"
57 def get_queryset(self, **kwargs):
58 qs = super(GenericListView, self).get_queryset()
59 self.filter = self.filter_class(self.request.GET, queryset=qs)
60 self.filter.form.helper = self.formhelper_class()
61 return self.filter.qs
63 def get_table(self, **kwargs):
64 table = super(GenericListView, self).get_table()
65 RequestConfig(
66 self.request, paginate={"page": 1, "per_page": self.paginate_by}
67 ).configure(table)
68 return table
70 def get_context_data(self, **kwargs):
71 context = super(GenericListView, self).get_context_data()
72 context[self.context_filter_name] = self.filter
73 context["docstring"] = "{}".format(self.model.__doc__)
74 if self.model.__name__.endswith("s"):
75 context["class_name"] = "{}".format(self.model.__name__)
76 else:
77 context["class_name"] = "{}s".format(self.model.__name__)
78 try:
79 context["get_arche_dump"] = self.model.get_arche_dump()
80 except AttributeError:
81 context["get_arche_dump"] = None
82 try:
83 context["create_view_link"] = self.model.get_createview_url()
84 except AttributeError:
85 context["create_view_link"] = None
86 try:
87 context["dl_csv_link"] = self.model.dl_csv_link()
88 except AttributeError:
89 context["dl_csv_link"] = None
90 return context
93class BaseCreateView(CreateView):
94 model = None
95 form_class = None
96 template_name = "browsing/generic_create.html"
98 def get_context_data(self, **kwargs):
99 context = super(BaseCreateView, self).get_context_data()
100 context["docstring"] = "{}".format(self.model.__doc__)
101 if self.model.__name__.endswith("s"):
102 context["class_name"] = "{}".format(self.model.__name__)
103 else:
104 context["class_name"] = "{}s".format(self.model.__name__)
105 return context
108class BaseUpdateView(UpdateView):
109 model = None
110 form_class = None
111 template_name = "browsing/generic_create.html"
113 def get_context_data(self, **kwargs):
114 context = super(BaseUpdateView, self).get_context_data()
115 context["docstring"] = "{}".format(self.model.__doc__)
116 if self.model.__name__.endswith("s"):
117 context["class_name"] = "{}".format(self.model.__name__)
118 else:
119 context["class_name"] = "{}s".format(self.model.__name__)
120 return context