【发布时间】:2015-08-04 03:24:50
【问题描述】:
我正在尝试插入一对多关系。取自flask-sqlalchemy的例子:
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
addresses = db.relationship('Address', backref='person',
lazy='dynamic')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
我编写了允许经过身份验证的用户创建新地址的视图。我正在使用烧瓶登录来获取经过身份验证的current_user。我想出了(未测试):
import flask.ext.login import login_required, current_user
@app.route('/new_address', methods = ["GET","POST"])
@login_required
def new_address():
address_form = AddressForm()
if address_form.validate_on_submit():
address = Address(email='foo@bar.com', person_id=current_user.id)
user = Person.query.get(current_user.id)
user.addresses.append(address)
db.session.add(address)
db.session.commit()
return redirect(...)
return render_template(...)
有两件事让我感到困惑。
第一个:对于一对多的关系,我需要更新两个模型吗?即,将新地址附加到 Person 模型并在 Address 模型上设置 person_id?
第二个:如果上面是的话,有没有办法通过current_user 直接将新地址附加到Person 模型上,或者我必须使用current_user.id 查询Person 模型,然后像更新该模型一样我已经做好了?
即,
代替:
user = Person.query.get(current_user.id)
user.addresses.append(address)
db.session.commit()
可以吗:
current_user.addresses.append(address)
db.session.commit()
【问题讨论】:
标签: python flask flask-sqlalchemy flask-login