私はフラスコ モンゴエンジンを使用しており、私のモデルPost
にはフィールドtitle
、slug
、body
およびがありtags
ます。それぞれPost
に固有のタグがslug
あり、それぞれPost
に少なくとも 1 つのタグが必要です。少なくとも1 つの要素を持つtags
oflist
も同様です。strings
class Post(db.Document):
created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
title = db.StringField(max_length=255, required=True)
slug = db.StringField(max_length=255, required=True, unique=True)
body = db.StringField(required=True)
tags = db.ListField(db.StringField(max_length=255), required=True) #each post should have at least one tag
def get_absolute_url(self):
return url_for('post', kwargs={"slug": self.slug})
def __unicode__(self):
return self.title
meta = {
'allow_inheritance': False,
'indexes': ['-created_at', 'slug', 'title', 'tags'],
'ordering': ['-created_at'],
'collection': 'posts',
}
新しい投稿を入力するためのテンプレートでフォームを作成すると、各タグが名前付きの新しいテキスト ボックスに入力されるtags
ため、a に 3 つのタグがある場合Post
、それぞれに名前を持つ 3 つのテキスト ボックスがtags
表示されます。
from flask.ext.mongoengine.wtf import model_form
class CreateEdit(MethodView):
form = model_form(Post) #Gets object of class PostForm which is a subclass of ModelForm, ModelForm is a subclass of Form
def post(self, slug = None):
form = self.form(request.form) #Populate PostForm with data from the request
post = Post()
form.populate_obj(post)
post.save()
flash('Update successful')
今mongoengine.base.ValidationError
、ブラウザにエラーが表示されます。投稿リクエストで渡すデータ (提供: Firebug)
title: third post
slug: 3rd
body: this is the 3rd post
tags: third
tags: last
デバッガーで検査するとrequest.form
、
werkzeug.datastructures.ImmutableMultiDict({'body': u'this is the 3rd post \r\n ', 'title': u'third post', 'slug': u'3rd', 'tags': u'third'})
現在tags
、フォームには複数ありますが、辞書には1つしかありません。これは辞書であるため、同じ名前のキーが複数存在することはありません。しかし、私が調べるform.data
と、
{'body': u'this is the 3rd post \r\n ', 'title': u'third post', 'created_at': datetime.datetime(2012, 12, 24, 14, 7, 18, 97273), 'tags': [], 'slug': u'3rd' }
フィールドはfromtags
で入力する必要があるため、不合理な空のリストです。また、デバッガーに入ると、tags
request.form
print request.form
ImmutableMultiDict([('body', u'this is the 3rd post \r\n '), ('title', u'third post'), ('slug', u'3rd'), ('tags', u'third'), ('tags', u'last')])
したがって、request
オブジェクトは同じ名前の複数の値を保持してrepresentation( __repr__
)で表示するが、オブジェクトに渡す値は1つだけであることを意味しModelForm
ます。しかし、私のModelForm
は の値を取得していませんtags
。
どうしたの?