开发者社区 问答 正文

如何使用SQLAlchemy完整堆栈开发课程将子元素与父元素关联

在本课程中,你应该制作一个创建“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

展开
收起
kun坤 2019-12-28 14:28:54 395 分享 版权
1 条回答
写回答
取消 提交回答
  • 在您的服务器代码中,您必须在保存todo对象之前显式地将todo列表设置为新创建的todo对象(例如todo = todo (description=description, list_id=some_todolist.id)),否则空=False约束将触发。如何获得所需的todolist对象取决于如何提供“此todo应该在此列表下”的思想,例如通过请求参数提供列表id,前提是前端知道这一点。

    2019-12-28 14:29:04
    赞同 展开评论
问答分类:
问答地址: