Skip to content

Commit 1d25c16

Browse files
committed
Add field argument to force TextAreaField on StringField with max_length
Before this commit, TextAreaField is used if and only if no max_length is specified.
1 parent db19e5d commit 1d25c16

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

flask_mongoengine/wtf/orm.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,11 @@ def conv_String(self, model, field, kwargs):
103103
if field.regex:
104104
kwargs['validators'].append(validators.Regexp(regex=field.regex))
105105
self._string_common(model, field, kwargs)
106-
if 'password' in kwargs:
107-
if kwargs.pop('password'):
108-
return f.PasswordField(**kwargs)
109-
if field.max_length:
110-
return f.StringField(**kwargs)
111-
return f.TextAreaField(**kwargs)
106+
if kwargs.pop('password', False):
107+
return f.PasswordField(**kwargs)
108+
if kwargs.pop('textarea', False) or not field.max_length:
109+
return f.TextAreaField(**kwargs)
110+
return f.StringField(**kwargs)
112111

113112
@converts('URLField')
114113
def conv_URL(self, model, field, kwargs):

tests/test_forms.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,17 @@ class BlogPost(db.Document):
115115

116116
class TextPost(BlogPost):
117117
email = db.EmailField(required=False)
118+
lead_paragraph = db.StringField(max_length=200)
118119
content = db.StringField(required=True)
119120

120121
class LinkPost(BlogPost):
121-
url = db.StringField(required=True)
122-
interest = db.DecimalField(required=True)
122+
url = db.StringField(required=True, max_length=200)
123+
interest = db.DecimalField(required=True)
123124

124125
# Create a text-based post
125-
TextPostForm = model_form(TextPost)
126+
TextPostForm = model_form(
127+
TextPost,
128+
field_args={'lead_paragraph': {'textarea': True}})
126129

127130
form = TextPostForm(MultiDict({
128131
'title': 'Using MongoEngine',
@@ -138,6 +141,10 @@ class LinkPost(BlogPost):
138141
self.assertTrue(form.validate())
139142
form.save()
140143

144+
self.assertEqual(form.title.type, 'StringField')
145+
self.assertEqual(form.content.type, 'TextAreaField')
146+
self.assertEqual(form.lead_paragraph.type, 'TextAreaField')
147+
141148
self.assertEquals(BlogPost.objects.first().title, 'Using MongoEngine')
142149
self.assertEquals(BlogPost.objects.count(), 1)
143150

0 commit comments

Comments
 (0)