在本课程中,你应该制作一个创建“todos”的表单,然后有一个父列表。一切正常,直到我们被指示添加一个外键'list_id'到子列表,以便它与父列表相关联。之后,当我试图创建一个todo时,我得到了完整性错误,list_id为null,并且违反了约束,因为它被设置为nullable=false。如何使todos(子)表与父(列表)表相关联,从而自动将list_id与父表的id相匹配?他们已经建立了一种关系,但它仍然没有把他们联系起来。下面是为表建模的后端代码。 '''
''' 后端创建todo '''
@app.route('/todos/create', methods=['POST'])
def create_todo():
error = False
body = {}
try:
description = request.get_json()['description']
todo = Todo(description=description)
db.session.add(todo)
db.session.commit()
body['description'] = todo.description
except:
db.session.rollback()
print(sys.exc_info())
finally:
db.session.close()
print("i am in todo")
if error:
abort(400)
else:
return jsonify(body)
''' 这是创建表单的前端javascript '''
document.getElementById('form').onsubmit = function(e) {
e.preventDefault();
const desc = descInput.value;
//descInput.value = '';
console.log(desc);
fetch('/todos/create', {
method: 'POST',
body: JSON.stringify({
'description': desc,
}),
headers: {
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(jsonResponse => {
console.log('response', jsonResponse);
li = document.createElement('li');
li.innerText = desc;
document.getElementById('todos').appendChild(li);
document.getElementById('error').className = 'hidden';
})
.catch(function() {
document.getElementById('error').className = '';
})
}
''' 问题来源StackOverflow 地址:/questions/59380176/how-to-associate-a-child-element-with-a-parent-using-sqlalchemy-full-stack-dev-u
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的服务器代码中,您必须在保存todo对象之前显式地将todo列表设置为新创建的todo对象(例如todo = todo (description=description, list_id=some_todolist.id)),否则空=False约束将触发。如何获得所需的todolist对象取决于如何提供“此todo应该在此列表下”的思想,例如通过请求参数提供列表id,前提是前端知道这一点。