5
5
from django import forms
6
6
from django import template
7
7
from django .core .files .uploadedfile import SimpleUploadedFile
8
- from django .db .models .fields .files import FieldFile , ImageFieldFile , FileField , ImageField
8
+ from django .db .models .fields .files import (
9
+ FieldFile , ImageFieldFile , FileField , ImageField )
9
10
from django .test import TestCase
10
11
from django .utils import six
11
12
17
18
18
19
from .models import Person , Document
19
20
21
+
20
22
class ApplicationForm (BetterForm ):
21
23
"""
22
24
A sample form with fieldsets.
@@ -25,11 +27,13 @@ class ApplicationForm(BetterForm):
25
27
name = forms .CharField ()
26
28
position = forms .CharField ()
27
29
reference = forms .CharField (required = False )
30
+
28
31
class Meta :
29
32
fieldsets = (('main' , {'fields' : ('name' , 'position' ), 'legend' : '' }),
30
33
('Optional' , {'fields' : ('reference' ,),
31
34
'classes' : ('optional' ,)}))
32
35
36
+
33
37
class InheritedForm (ApplicationForm ):
34
38
"""
35
39
An inherited form that does not define its own fieldsets inherits
@@ -38,13 +42,15 @@ class InheritedForm(ApplicationForm):
38
42
"""
39
43
pass
40
44
45
+
41
46
class MudSlingerApplicationForm (ApplicationForm ):
42
47
"""
43
48
Inherited forms can manually inherit and change/override the
44
49
parents' fieldsets by using the logical Python code in Meta:
45
50
46
51
"""
47
52
target = forms .CharField ()
53
+
48
54
class Meta :
49
55
fieldsets = list (ApplicationForm .Meta .fieldsets )
50
56
fieldsets [0 ] = ('main' , {'fields' : ('name' , 'position' , 'target' ),
@@ -74,6 +80,7 @@ class HoneypotForm(BetterForm):
74
80
"""
75
81
honeypot = forms .CharField ()
76
82
name = forms .CharField ()
83
+
77
84
class Meta :
78
85
row_attrs = {'honeypot' : {'style' : 'display: none' }}
79
86
@@ -88,6 +95,7 @@ class PersonForm(BetterModelForm):
88
95
89
96
"""
90
97
title = forms .CharField ()
98
+
91
99
class Meta :
92
100
model = Person
93
101
fieldsets = [('main' , {'fields' : ['name' ],
@@ -109,6 +117,7 @@ class Meta:
109
117
model = Person
110
118
fieldsets = [('main' , {'fields' : ['name' ]})]
111
119
120
+
112
121
class ManualPartialPersonForm (BetterModelForm ):
113
122
"""
114
123
A ``BetterModelForm`` whose fieldsets don't contain all fields
@@ -120,6 +129,7 @@ class Meta:
120
129
fieldsets = [('main' , {'fields' : ['name' ]})]
121
130
fields = ['name' , 'age' ]
122
131
132
+
123
133
class ExcludePartialPersonForm (BetterModelForm ):
124
134
"""
125
135
A ``BetterModelForm`` whose fieldsets don't contain all fields
@@ -131,6 +141,7 @@ class Meta:
131
141
fieldsets = [('main' , {'fields' : ['name' ]})]
132
142
exclude = ['age' ]
133
143
144
+
134
145
class AcrobaticPersonForm (PersonForm ):
135
146
"""
136
147
A ``BetterModelForm`` that inherits from another and overrides one
@@ -139,10 +150,39 @@ class AcrobaticPersonForm(PersonForm):
139
150
"""
140
151
agility = forms .IntegerField ()
141
152
speed = forms .IntegerField ()
153
+
142
154
class Meta (PersonForm .Meta ):
143
155
fieldsets = list (PersonForm .Meta .fieldsets )
144
- fieldsets = fieldsets [:1 ] + \
145
- [('Acrobatics' , {'fields' : ('age' , 'speed' , 'agility' )})]
156
+ fieldsets = fieldsets [:1 ] + [
157
+ ('Acrobatics' , {'fields' : ('age' , 'speed' , 'agility' )})]
158
+
159
+
160
+ class AbstractPersonForm (BetterModelForm ):
161
+ """
162
+ An abstract ``BetterModelForm`` without fieldsets.
163
+
164
+ """
165
+ title = forms .CharField ()
166
+
167
+ class Meta :
168
+ pass
169
+
170
+
171
+ class InheritedMetaAbstractPersonForm (AbstractPersonForm ):
172
+ """
173
+ A ``BetterModelForm`` that inherits from abstract one and its Meta class
174
+ and adds fieldsets
175
+
176
+ """
177
+ class Meta (AbstractPersonForm .Meta ):
178
+ model = Person
179
+ fieldsets = [('main' , {'fields' : ['name' ],
180
+ 'legend' : '' ,
181
+ 'classes' : ['main' ]}),
182
+ ('More' , {'fields' : ['age' ],
183
+ 'description' : 'Extra information' ,
184
+ 'classes' : ['more' , 'collapse' ]}),
185
+ (None , {'fields' : ['title' ]})]
146
186
147
187
148
188
class BetterFormTests (TestCase ):
@@ -249,6 +289,32 @@ class BetterFormTests(TestCase):
249
289
'classes' : ''
250
290
}),
251
291
],
292
+ InheritedMetaAbstractPersonForm :
293
+ [
294
+ (['name' ],
295
+ {
296
+ 'name' : 'main' ,
297
+ 'legend' : '' ,
298
+ 'description' : '' ,
299
+ 'classes' : 'main' ,
300
+ }),
301
+ (['age' ],
302
+ {
303
+ 'name' : 'More' ,
304
+ 'legend' : 'More' ,
305
+ 'description' : 'Extra information' ,
306
+ 'classes' : 'more collapse'
307
+ }),
308
+ (['title' ],
309
+ {
310
+ 'name' : None ,
311
+ 'legend' : None ,
312
+ 'description' : '' ,
313
+ 'classes' : ''
314
+ }),
315
+ ],
316
+
317
+
252
318
}
253
319
254
320
def test_iterate_fieldsets (self ):
0 commit comments