Djangorestframework:在一个请求中发布嵌套json对象的示例?

时间:2014-01-04 06:54:19

标签: python django json post django-rest-framework

有人能给我一个成功发布复杂json对象的序列化器的例子吗?

例如,如果我在一个请求中发布了Author和所有Book个帖子。

我想在一个请求中POST一个Author的json表示和Book的json表示,而不仅仅是书籍的主键(这是默认值)

我可以发布什么:

{"Author":"Smith, Joe", "books":{[1,2]}
}

那么我想要POST:

{"Author":"Smith, Joe", "books":[
         {"title":"War and Peaceful"},{"title":"Sense and Sensational"}
         ] 
}

我已经玩了很长时间了,在尝试POST多个对象时我确实记得这个错误:

  

实例在数据库“default”上,值在数据库“None”

搜索告诉我,在保存“父”模型对象之前,我可能需要首先在Django中保存嵌套模型对象。但是这不需要两个单独的POST请求 - 一个用于POST嵌套对象,另一个用于父级POST? (发出这些请求的客户端是移动本机应用程序)。我是否会走错路,因为我认为该框架本身支持我正在努力实现的目标。

我看到两个问题: 1.在创建新作者时,我只能发布书籍的主键 这些书已经需要先创建了。我无法在同一请求中创建新的Author和新的Book

感谢您的指导!

更新:等一下 - 在DjangoRestFramework中支持嵌套写入(我认为这是我想要完成的)吗?

1 个答案:

答案 0 :(得分:1)

  

更新:等一下 - 在DjangoRestFramework中支持嵌套写入(我认为这是我想要完成的)吗?

在某种意义上说,“是否有一个通用视图会自动神奇地为我做这一切?” - 不,还没有。

最好的办法是扩展其中一个基类,例如: APIView并实现post循环请求正文,创建所需的实体并设置关系。是的,您必须手动编写代码,但不应该太多。请记住,您仍然可以在自己的代码中利用DRF序列化程序的验证行为。