1
+ # -*- coding: utf-8 -*-
1
2
"""
2
3
Based on django mongotools (https://github.com/wpjunior/django-mongotools) by
3
4
Wilson Júnior (wilsonpjunior@gmail.com).
@@ -16,22 +17,22 @@ class MongoFormFieldGenerator(object):
16
17
"""This class generates Django form-fields for mongoengine-fields."""
17
18
18
19
def generate (self , field , ** kwargs ):
19
- """Tries to lookup a matching formfield generator (lowercase
20
+ """Tries to lookup a matching formfield generator (lowercase
20
21
field-classname) and raises a NotImplementedError of no generator
21
22
can be found.
22
23
"""
23
24
field_name = field .__class__ .__name__ .lower ()
24
25
if hasattr (self , 'generate_%s' % field_name ):
25
26
return getattr (self , 'generate_%s' % field_name )(field , ** kwargs )
26
-
27
+
27
28
for cls in field .__class__ .__bases__ :
28
29
cls_name = cls .__name__ .lower ()
29
30
if hasattr (self , 'generate_%s' % cls_name ):
30
31
return getattr (self , 'generate_%s' % cls_name )(field , ** kwargs )
31
32
32
33
raise NotImplementedError ('%s is not supported by MongoForm' % \
33
34
field .__class__ .__name__ )
34
-
35
+
35
36
def get_field_choices (self , field , include_blank = True ,
36
37
blank_choice = BLANK_CHOICE_DASH ):
37
38
first_choice = include_blank and blank_choice or []
@@ -71,7 +72,7 @@ def generate_stringfield(self, field, **kwargs):
71
72
72
73
if field .max_length and not field .choices :
73
74
defaults ['max_length' ] = field .max_length
74
-
75
+
75
76
if field .max_length is None and not field .choices :
76
77
defaults ['widget' ] = forms .Textarea
77
78
@@ -84,7 +85,7 @@ def generate_stringfield(self, field, **kwargs):
84
85
85
86
if not field .required :
86
87
defaults ['empty_value' ] = None
87
-
88
+
88
89
defaults .update (kwargs )
89
90
return form_class (** defaults )
90
91
@@ -95,9 +96,9 @@ def generate_emailfield(self, field, **kwargs):
95
96
'max_length' : field .max_length ,
96
97
'initial' : field .default ,
97
98
'label' : self .get_field_label (field ),
98
- 'help_text' : self .get_field_help_text (field )
99
+ 'help_text' : self .get_field_help_text (field )
99
100
}
100
-
101
+
101
102
defaults .update (kwargs )
102
103
return forms .EmailField (** defaults )
103
104
@@ -110,7 +111,7 @@ def generate_urlfield(self, field, **kwargs):
110
111
'label' : self .get_field_label (field ),
111
112
'help_text' : self .get_field_help_text (field )
112
113
}
113
-
114
+
114
115
defaults .update (kwargs )
115
116
return forms .URLField (** defaults )
116
117
@@ -123,9 +124,9 @@ def generate_intfield(self, field, **kwargs):
123
124
'initial' : field .default ,
124
125
'label' : self .get_field_label (field ),
125
126
'choices' : self .get_field_choices (field ),
126
- 'help_text' : self .get_field_help_text (field )
127
+ 'help_text' : self .get_field_help_text (field )
127
128
}
128
-
129
+
129
130
defaults .update (kwargs )
130
131
return forms .TypedChoiceField (** defaults )
131
132
else :
@@ -135,9 +136,9 @@ def generate_intfield(self, field, **kwargs):
135
136
'max_value' : field .max_value ,
136
137
'initial' : field .default ,
137
138
'label' : self .get_field_label (field ),
138
- 'help_text' : self .get_field_help_text (field )
139
+ 'help_text' : self .get_field_help_text (field )
139
140
}
140
-
141
+
141
142
defaults .update (kwargs )
142
143
return forms .IntegerField (** defaults )
143
144
@@ -176,19 +177,19 @@ def generate_booleanfield(self, field, **kwargs):
176
177
'initial' : field .default ,
177
178
'label' : self .get_field_label (field ),
178
179
'choices' : self .get_field_choices (field ),
179
- 'help_text' : self .get_field_help_text (field )
180
+ 'help_text' : self .get_field_help_text (field )
180
181
}
181
-
182
+
182
183
defaults .update (kwargs )
183
184
return forms .TypedChoiceField (** defaults )
184
185
else :
185
186
defaults = {
186
187
'required' : field .required ,
187
188
'initial' : field .default ,
188
189
'label' : self .get_field_label (field ),
189
- 'help_text' : self .get_field_help_text (field )
190
+ 'help_text' : self .get_field_help_text (field )
190
191
}
191
-
192
+
192
193
defaults .update (kwargs )
193
194
return forms .BooleanField (** defaults )
194
195
@@ -198,7 +199,7 @@ def generate_datetimefield(self, field, **kwargs):
198
199
'initial' : field .default ,
199
200
'label' : self .get_field_label (field ),
200
201
}
201
-
202
+
202
203
defaults .update (kwargs )
203
204
return forms .DateTimeField (** defaults )
204
205
@@ -208,7 +209,7 @@ def generate_referencefield(self, field, **kwargs):
208
209
'help_text' : self .get_field_help_text (field ),
209
210
'required' : field .required
210
211
}
211
-
212
+
212
213
defaults .update (kwargs )
213
214
return ReferenceField (field .document_type .objects , ** defaults )
214
215
@@ -219,9 +220,9 @@ def generate_listfield(self, field, **kwargs):
219
220
'required' : field .required ,
220
221
'label' : self .get_field_label (field ),
221
222
'help_text' : self .get_field_help_text (field ),
222
- 'widget' : forms .CheckboxSelectMultiple
223
+ 'widget' : forms .CheckboxSelectMultiple
223
224
}
224
-
225
+
225
226
defaults .update (kwargs )
226
227
return forms .MultipleChoiceField (** defaults )
227
228
elif isinstance (field .field , MongoReferenceField ):
@@ -230,19 +231,19 @@ def generate_listfield(self, field, **kwargs):
230
231
'help_text' : self .get_field_help_text (field ),
231
232
'required' : field .required
232
233
}
233
-
234
+
234
235
defaults .update (kwargs )
235
236
f = DocumentMultipleChoiceField (field .field .document_type .objects , ** defaults )
236
237
return f
237
-
238
+
238
239
def generate_filefield (self , field , ** kwargs ):
239
240
return forms .FileField (** kwargs )
240
-
241
+
241
242
class MongoDefaultFormFieldGenerator (MongoFormFieldGenerator ):
242
243
"""This class generates Django form-fields for mongoengine-fields."""
243
-
244
+
244
245
def generate (self , field , ** kwargs ):
245
- """Tries to lookup a matching formfield generator (lowercase
246
+ """Tries to lookup a matching formfield generator (lowercase
246
247
field-classname) and raises a NotImplementedError of no generator
247
248
can be found.
248
249
"""
@@ -253,15 +254,15 @@ def generate(self, field, **kwargs):
253
254
# for a widget.
254
255
# TODO: Somehow add a warning
255
256
defaults = {'required' : field .required }
256
-
257
+
257
258
if hasattr (field , 'min_length' ):
258
259
defaults ['min_length' ] = field .min_length
259
-
260
+
260
261
if hasattr (field , 'max_length' ):
261
262
defaults ['max_length' ] = field .max_length
262
-
263
+
263
264
if hasattr (field , 'default' ):
264
265
defaults ['initial' ] = field .default
265
-
266
+
266
267
defaults .update (kwargs )
267
- return forms .CharField (** kwargs )
268
+ return forms .CharField (** kwargs )
0 commit comments