我只是感到困惑。我忘了添加
db.session.add(newbranch)
到下面的代码,只是为了找出它,不知何故它已经在会话中,就像我运行commit()时一样。
我的研究表明需要添加新项目。好吧,正如你在下面的代码中看到的那样,我正在创建新项目但不添加它们,但它们会被添加。
任何人都可以帮我理解为什么吗?
从我看来:
newbranch = Branch(
name = newbranch_form.name.data,
account = account)
newbranch_form.populate_assoc(newbranch)
db.session.commit()
我的表单中的帮助函数:
def populate_assoc(self, branch_obj):
branch_obj.name = self.name.data
for assoc_obj in branch_obj.equipment_assoc:
db.session.delete(assoc_obj)
for eq, mod in zip(self.equipment, self.mod):
new_assoc = A_branch_eq(
equipment_id = eq.data,
branch = branch_obj,
mod = mod.data)
答案 0 :(得分:5)
branch_obj
已在会话中。通过分配关系属性(A_branh_eq
)将其与branch=branch_obj
实例关联时,它们会添加到brand_obj
已经属于的同一会话中。当实例中没有任何部分或其关系已经在会话中时,您只需要显式使用db.session.add
。
控制此设置的设置为relationship.cascade
。默认设置包括save-update
选项。
save-update
级联表示当一个对象通过Session
放入Session.add()
时,通过此relationship()
与之关联的所有对象也应添加到该Session
split
。