我没有成功使用model_form在我的模型中设置日期值:
@app.route('/admin/article/<int:id>', methods=['PUT'])
@login_required
def admin_update(id):
ArticleForm = model_form(Article, Form)
article = Article.query.get_or_404(id)
form = ArticleForm(request.form, article)
if form.validate():
form.populate_obj(article)
db.session.commit()
return jsonify(status='success', article=article.as_dict()), 200
# Invalid
return jsonify(status='error', errors=form.errors), 400
我的模型看起来像这样:
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255), index=True)
lead = db.Column(db.Text)
body = db.Column(db.Text)
date = db.Column(db.DateTime)
def __init__(self, id=None, title=None, lead=None, body=None, date=None):
self.id = id
self.title = title
self.lead = lead
self.body = body
self.date = date
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
我将文章导出为dict,因此我将其转换为JSON。我的基于JS的WYSIWYG编辑器在XHR请求中转储所有数据(title / lead / body / date)并将其发送到API点以上。
我从此电话中得到的回复:
{
"errors": {
"date": [
"Not a valid datetime value"
]
},
"status": "error"
}
我知道我尝试为Sqlalchemy 28-03-2017
设置一个字符串(当前格式为dd-mm-yyyy DateTime
),但我该如何转换呢?我可以将格式调整为所需的任何内容,但我想坚持model_form
的简单视图。
使用的工具:
答案 0 :(得分:0)
我认为问题不在于Model或SqlAlchemy,而在于form。
我可以看到你的日期列是DateTime(不是Date)。这是Form的一个小例子,它可以解释这个问题:
%Y-%m-%d %H:%M:%S
为什么会这样?因为DateTimeField具有不同的default format - date field
。
如何解决?最简单的方法是将格式设置为class ArticleForm(Form):
date = DateTimeField('Date', format='%d-%m-%Y')
form_data = MultiDict()
form_data.add('date', '28-03-2017')
article = ArticleForm(form_data)
print article.validate() # True
格式:
form_data = MultiDict()
date = datetime.datetime.strptime('28-03-2017', '%d-%m-%Y')
form_data.add('date', '{:%Y-%m-%d %H:%M:%S}'.format(date))
article = ArticleForm(form_data)
print article.validate() # True
另一种方法是手动转换日期:
n
希望这有帮助。