【发布时间】:2017-10-26 09:13:39
【问题描述】:
如何让 attr 成为被检查列的名称并为被检查列的值赋值?
models.py
class Dates(db.Model):
username=db.Column(db.String, primary_key=True)
apples = db.Column(db.DateTime)
oranges = db.Column(db.DateTime)
milk = db.Column(db.DateTime)
bananas = db.Column(db.DateTime)
beans = db.Column(db.DateTime)
def is_expired(self, date)
#I want attr to equal the column it is coming from
#example if I typed Dates.apples.is_expired('2017-01-01')
#I want attr to equal 'apples', that way Rules.rule brings back
# the rule # associated with apples
#I want value to be the date from Dates.apples
a=Rules.query.filter_by(name=attr).first()
if a.rule=='1':
value=datetime.datetime.strptime(value, '%Y-%m-%d')
date=datetime.datetime.strptime(date, '%Y-%m-%d')
for i in range(36):
value=add_one_month(value)
if date>value:
return True
else:
return False
elif a.rule=='2':
value=datetime.datetime.strptime(value, '%Y-%m-%d')
date=datetime.datetime.strptime(date, '%Y-%m-%d')
for i in range(12):
value=add_one_month(value)
if date>value:
return True
else:
return False
def __repr__(self): # pragma: no cover
return '<Mobility %r>' % (self.username)
class Rules(db.model)
rule=db.Column(db.Integer, primary_key=True)
name=db.Column(db.String(45))
def __repr__(self): # pragma: no cover
return '<Mobility %r>' % (self.name)
另一个函数中的调用示例:
user=Dates.query.filter_by(username='bob').first()
user.apples='2017-02-11'
if user.apples.is_expired('2017-04-12'):
color=red
在这种情况下 attr='apples', value='2017=02-11'
【问题讨论】:
-
attr方法内部没有已知的attr对象,可能应该是date? -
您的
a对象也有Query类型,而不是Rules,可能您忘记添加.first(),如a=Rules.query.filter_by(name=attr).first()? -
还有
value对象的来源(同样在is_expired方法内部)? -
强调“可能”这个词。你的问题也有点不清楚你在追求什么。无法验证的代码示例没有帮助。
标签: python python-2.7 sqlalchemy flask-sqlalchemy