3
3
from django .views .generic .edit import CreateView , DeleteView , UpdateView
4
4
5
5
from django_enum import EnumField
6
+ from django_enum .fields import FlagField
6
7
from tests .djenum import enums as dj_enums
7
- from tests .djenum .models import EnumTester
8
+ from tests .djenum .models import EnumTester , FlagFilterTester
8
9
9
10
10
11
class URLMixin :
@@ -36,6 +37,22 @@ def get_context_data(self, **kwargs):
36
37
}
37
38
38
39
40
+ class FlagURLMixin :
41
+ NAMESPACE = "tests_djenum"
42
+ enums = dj_enums
43
+
44
+ def get_context_data (self , ** kwargs ):
45
+ return {
46
+ ** super ().get_context_data (** kwargs ),
47
+ "SmallPositiveFlagEnum" : self .enums .SmallPositiveFlagEnum ,
48
+ "PositiveFlagEnum" : self .enums .PositiveFlagEnum ,
49
+ "BigPositiveFlagEnum" : self .enums .BigPositiveFlagEnum ,
50
+ "NAMESPACE" : self .NAMESPACE ,
51
+ "update_path" : f"{ self .NAMESPACE } :flag-update" ,
52
+ "delete_path" : f"{ self .NAMESPACE } :flag-delete" ,
53
+ }
54
+
55
+
39
56
class EnumTesterDetailView (URLMixin , DetailView ):
40
57
model = EnumTester
41
58
template_name = "enumtester_detail.html"
@@ -74,6 +91,44 @@ def get_success_url(self): # pragma: no cover
74
91
return reverse (f"{ self .NAMESPACE } :enum-list" )
75
92
76
93
94
+ class FlagTesterDetailView (FlagURLMixin , DetailView ):
95
+ model = FlagFilterTester
96
+ template_name = "flagtester_detail.html"
97
+ fields = "__all__"
98
+
99
+
100
+ class FlagTesterListView (FlagURLMixin , ListView ):
101
+ model = FlagFilterTester
102
+ template_name = "flagtester_list.html"
103
+ fields = "__all__"
104
+
105
+
106
+ class FlagTesterCreateView (FlagURLMixin , CreateView ):
107
+ model = FlagFilterTester
108
+ template_name = "flagtester_form.html"
109
+ fields = "__all__"
110
+
111
+ def post (self , request , * args , ** kwargs ):
112
+ return super ().post (request , * args , ** kwargs )
113
+
114
+
115
+ class FlagTesterUpdateView (FlagURLMixin , UpdateView ):
116
+ model = FlagFilterTester
117
+ template_name = "flagtester_form.html"
118
+ fields = "__all__"
119
+
120
+ def get_success_url (self ): # pragma: no cover
121
+ return reverse (f"{ self .NAMESPACE } :flag-update" , kwargs = {"pk" : self .object .pk })
122
+
123
+
124
+ class FlagTesterDeleteView (FlagURLMixin , DeleteView ):
125
+ model = FlagFilterTester
126
+ template_name = "flagtester_form.html"
127
+
128
+ def get_success_url (self ): # pragma: no cover
129
+ return reverse (f"{ self .NAMESPACE } :flag-list" )
130
+
131
+
77
132
try :
78
133
from rest_framework import serializers , viewsets
79
134
@@ -98,6 +153,7 @@ class DRFView(viewsets.ModelViewSet):
98
153
from django_enum .filters import (
99
154
FilterSet as EnumFilterSet ,
100
155
EnumFilter ,
156
+ EnumFlagFilter ,
101
157
MultipleEnumFilter ,
102
158
)
103
159
@@ -254,5 +310,63 @@ class Meta:
254
310
model = EnumTester
255
311
template_name = "enumtester_list.html"
256
312
313
+ class FlagTesterFilterViewSet (FlagURLMixin , FilterView ):
314
+ class FlagTesterFilter (EnumFilterSet ):
315
+ class Meta :
316
+ model = FlagFilterTester
317
+ fields = "__all__"
318
+
319
+ filterset_class = FlagTesterFilter
320
+ model = FlagFilterTester
321
+ template_name = "flagtester_list.html"
322
+
323
+ class FlagTesterFilterExcludeViewSet (FlagURLMixin , FilterView ):
324
+ class FlagTesterExcludeFilter (EnumFilterSet ):
325
+ class Meta :
326
+ model = FlagFilterTester
327
+ fields = "__all__"
328
+ filter_overrides = {
329
+ FlagField : {
330
+ "filter_class" : EnumFlagFilter ,
331
+ "extra" : lambda f : {"exclude" : True },
332
+ }
333
+ }
334
+
335
+ filterset_class = FlagTesterExcludeFilter
336
+ model = FlagFilterTester
337
+ template_name = "flagtester_list.html"
338
+
339
+ class FlagTesterFilterConjoinedViewSet (FlagURLMixin , FilterView ):
340
+ class FlagTesterConjoinedFilter (EnumFilterSet ):
341
+ class Meta :
342
+ model = FlagFilterTester
343
+ fields = "__all__"
344
+ filter_overrides = {
345
+ FlagField : {
346
+ "filter_class" : EnumFlagFilter ,
347
+ "extra" : lambda f : {"conjoined" : True },
348
+ }
349
+ }
350
+
351
+ filterset_class = FlagTesterConjoinedFilter
352
+ model = FlagFilterTester
353
+ template_name = "flagtester_list.html"
354
+
355
+ class FlagTesterFilterConjoinedExcludeViewSet (FlagURLMixin , FilterView ):
356
+ class FlagTesterConjoinedExcludeFilter (EnumFilterSet ):
357
+ class Meta :
358
+ model = FlagFilterTester
359
+ fields = "__all__"
360
+ filter_overrides = {
361
+ FlagField : {
362
+ "filter_class" : EnumFlagFilter ,
363
+ "extra" : lambda f : {"exclude" : True , "conjoined" : True },
364
+ }
365
+ }
366
+
367
+ filterset_class = FlagTesterConjoinedExcludeFilter
368
+ model = FlagFilterTester
369
+ template_name = "flagtester_list.html"
370
+
257
371
except ImportError : # pragma: no cover
258
372
pass
0 commit comments