在我基于sqlalchemy的flask应用程序中,我有一个这样的模型:
class Foo(object):
start_date = db.Column(db.DateTime())
它运行正常但是当我使用模板引擎通过{{ foo.start_date }}
将日期打印到HTML页面时,它会打印出像2015-8-8 00:00:00
这样丑陋的行。试图想出我自己的格式,我想到了一些聪明的东西(至少在我遇到问题之前)
class Foo(object):
start_date = db.Column(db.DateTime())
def __getattr__(self, name):
return "{0}-{1}-{2}".format(self.start_date.year....)
然而,SQLAlchemy内部的东西并不是这样的。创建新对象时,它会引发以下异常:
File "<string>", line 6, in __init__
File "/home/wenliang/work/template/flask/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 526, in _declarative_constructor
setattr(self, k, kwargs[k])
File "/home/wenliang/work/template/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 226, in __set__
instance_dict(instance), value, None)
File "/home/wenliang/work/template/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 694, in set
state._modified_event(dict_, self, old)
AttributeError: 'NoneType' object has no attribute '_modified_event'
之前有人见过这个吗?
答案 0 :(得分:3)
SQLAlchemy在内部使用__getattr__
。如果你超载它,整个炼金术魔法将不再起作用。
您要访问的字段是DateTime
对象。如果要以任何其他方式将其格式化为字符串作为默认呈现,则应使用strftime()
。
https://stackoverflow.com/a/4830620/3929826举了一个例子。 https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior包含格式字符串的文档。