33from django .views .generic .edit import CreateView , DeleteView , UpdateView
44
55from django_enum import EnumField
6+ from django_enum .fields import FlagField
67from tests .djenum import enums as dj_enums
7- from tests .djenum .models import EnumTester
8+ from tests .djenum .models import EnumTester , FlagFilterTester
89
910
1011class URLMixin :
@@ -36,6 +37,22 @@ def get_context_data(self, **kwargs):
3637 }
3738
3839
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+
3956class EnumTesterDetailView (URLMixin , DetailView ):
4057 model = EnumTester
4158 template_name = "enumtester_detail.html"
@@ -74,6 +91,44 @@ def get_success_url(self): # pragma: no cover
7491 return reverse (f"{ self .NAMESPACE } :enum-list" )
7592
7693
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+
77132try :
78133 from rest_framework import serializers , viewsets
79134
@@ -98,6 +153,7 @@ class DRFView(viewsets.ModelViewSet):
98153 from django_enum .filters import (
99154 FilterSet as EnumFilterSet ,
100155 EnumFilter ,
156+ EnumFlagFilter ,
101157 MultipleEnumFilter ,
102158 )
103159
@@ -254,5 +310,63 @@ class Meta:
254310 model = EnumTester
255311 template_name = "enumtester_list.html"
256312
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+
257371except ImportError : # pragma: no cover
258372 pass
0 commit comments