1
+ import warnings
2
+
1
3
from django import forms
2
4
from django .contrib .admin .widgets import RelatedFieldWidgetWrapper
3
5
from django .core .validators import EMPTY_VALUES
6
+ from django .forms import ChoiceField
4
7
from django .utils .translation import gettext_lazy as _
5
8
6
9
from cms .forms .utils import get_page_choices , get_site_choices
7
10
from cms .forms .validators import validate_url
8
11
from cms .forms .widgets import PageSelectWidget , PageSmartLinkWidget
9
12
from cms .models .pagemodel import Page
13
+ from cms .utils .compat import DJANGO_4_2
10
14
11
15
12
- class SuperLazyIterator () :
16
+ class SuperLazyIterator :
13
17
def __init__ (self , func ):
18
+ warnings .warn ("SuperLazyIterator is deprecated." ,
19
+ DeprecationWarning , stacklevel = 2 )
14
20
self .func = func
15
21
16
22
def __iter__ (self ):
@@ -19,14 +25,23 @@ def __iter__(self):
19
25
20
26
class LazyChoiceField (forms .ChoiceField ):
21
27
28
+ def __init__ (self , * args , ** kwargs ):
29
+ warnings .warn ("LazyChoiceField is deprecated. Use Django's ChoiceField instead." ,
30
+ DeprecationWarning , stacklevel = 2 )
31
+ super ().__init__ (* args , ** kwargs )
32
+
22
33
@property
23
34
def choices (self ):
24
35
return self ._choices
25
36
26
37
@choices .setter
27
38
def choices (self , value ):
28
- # we overwrite this function so no normalize(value) is called
29
- self ._choices = self .widget .choices = value
39
+ # we overwrite this function so no list(value) or normalize_choices(value) is called
40
+ # also, do not call the widget's setter as of Django 5
41
+ if DJANGO_4_2 :
42
+ self ._choices = self .widget .choices = value
43
+ else :
44
+ self ._choices = self .widget ._choices = value
30
45
31
46
32
47
class PageSelectFormField (forms .MultiValueField ):
@@ -49,13 +64,11 @@ def __init__(self, queryset=None, empty_label="---------", cache_choices=False,
49
64
errors = self .default_error_messages .copy ()
50
65
if 'error_messages' in kwargs :
51
66
errors .update (kwargs ['error_messages' ])
52
- site_choices = SuperLazyIterator (get_site_choices )
53
- page_choices = SuperLazyIterator (get_page_choices )
54
67
self .limit_choices_to = limit_choices_to
55
68
kwargs ['required' ] = required
56
69
fields = (
57
- LazyChoiceField (choices = site_choices , required = False , error_messages = {'invalid' : errors ['invalid_site' ]}),
58
- LazyChoiceField (choices = page_choices , required = False , error_messages = {'invalid' : errors ['invalid_page' ]}),
70
+ ChoiceField (choices = get_site_choices , required = False , error_messages = {'invalid' : errors ['invalid_site' ]}),
71
+ ChoiceField (choices = get_page_choices , required = False , error_messages = {'invalid' : errors ['invalid_page' ]}),
59
72
)
60
73
61
74
# Remove the unexpected blank kwarg if it's supplied,
0 commit comments