Python 烧瓶炼金术和烧瓶不停不接孙子 问题

Python 烧瓶炼金术和烧瓶不停不接孙子 问题,python,sqlalchemy,flask,flask-sqlalchemy,flask-restless,Python,Sqlalchemy,Flask,Flask Sqlalchemy,Flask Restless,我正在Flask、Flask SQLAlchemy和Flask Untivent上构建一个应用程序。我已经使用Antivent为父子孙关系*生成了一个API。对我的孩子施加压力可以正确地取回孙子,但对父母施加压力不会为每个孩子取回孙子 *事实上,亲子关系是一种多对多的关系,但前提是相同的 模型 获取:/api/子响应 获取:/api/父响应 在看了几个小时之后,我将给出目前我得到的最佳答案。我尝试了许多方法,但都未能成功地渲染孙子,因此我转向flask Antientive issues tra

我正在Flask、Flask SQLAlchemy和Flask Untivent上构建一个应用程序。我已经使用Antivent为父子孙关系*生成了一个API。对我的孩子施加压力可以正确地取回孙子,但对父母施加压力不会为每个孩子取回孙子

*事实上,亲子关系是一种多对多的关系,但前提是相同的

模型 获取:/api/子响应 获取:/api/父响应
在看了几个小时之后,我将给出目前我得到的最佳答案。我尝试了许多方法,但都未能成功地渲染孙子,因此我转向flask Antientive issues tracker查看我能找到什么:

而@jfinkels的反应似乎表明,您想要的东西在flask Untivent中目前是不可能的

假设我对问题状态的评估是正确的,您可能希望研究围绕这个问题进行设计,或者使用不同的包来服务您的API(可能是Flask restful,尽管我承认我没有使用过它,也不知道它是否合适)

FWIW,我一直在为我正在进行的项目构建json API。这个过程比我想象的要复杂一些,但它也有足够的自由度来更好地控制使用什么查询以及结果如何序列化。

可以用来获取孙子

def parent_post_get_many(result=None, search_params=None, **kw):
   for object in result['objects']:
      for child in object['children']:
         grandchild = Grandchild.query.get(child['grand_child_id'])
         child.update({'grandchild': grandchild})

api.create_api(Parent, postprocessors={'GET_MANY': [parent_post_get_many]})

我得出了与你相同的结论,并开始使用Flask Restful。它也有自己的挑战,但它似乎比Flask Untivent提供了更多的控制,所以我一直在向前推进。我不完全理解这个问题。它似乎是一个相当可扩展的工具,用于构建极其基本的RESTAPI。这里没有提到查询、ORMs等等。正确——要从Flask Classy中获得我认为您需要的东西,需要做更多的工作。我只是提醒您注意它的存在,以防您用尽各种选项从旨在以最少干预公开REST api的包中获取所需内容。这似乎在数据结构中包含了模型的实例,而不是序列化实例,这会导致JSON序列化程序出错。查看Untivent的内部结构,序列化函数似乎是API实例上的“serializer()。您知道是否可以访问它来序列化实例吗?
{
  "num_results": 1, 
  "objects": [
    {
      "id": 1, 
      "name": "test"
      "grandchild": {
        "id": 1, 
        "name": "test"
      }
    }
  ], 
  "page": 1, 
  "total_pages": 1
}
{
  "num_results": 1, 
  "objects": [
    {
      "children": [
        {
          "id": 1, 
          "name": "test", 
          "grandchild_id": 1
        }
      ],
      "id": 1, 
      "name": "test"
    }], 
  "page": 1, 
  "total_pages": 1
}
def parent_post_get_many(result=None, search_params=None, **kw):
   for object in result['objects']:
      for child in object['children']:
         grandchild = Grandchild.query.get(child['grand_child_id'])
         child.update({'grandchild': grandchild})

api.create_api(Parent, postprocessors={'GET_MANY': [parent_post_get_many]})