Json django rest框架(批量):如何实现非标准批量加载更新/创建

Json django rest框架(批量):如何实现非标准批量加载更新/创建,json,django,rest,django-rest-framework,bulk-load,Json,Django,Rest,Django Rest Framework,Bulk Load,我一直在尝试实现一种方法来处理DRF中的一些上传数据(有或没有批量),以使其与我的其他API保持一致,并返回良好的结果,但这似乎比它的价值更麻烦 系统处理来自外部系统的引用数据,这些系统不需要知道数据是如何存储的或已经存在的。因此,要上载的JSON数据如下所示: data = [ {"name": "foo", 'key': 'FOO', "resource_type": 'some-resource', 'team_tag': 'ABC1', 'properties':

我一直在尝试实现一种方法来处理DRF中的一些上传数据(有或没有批量),以使其与我的其他API保持一致,并返回良好的结果,但这似乎比它的价值更麻烦

系统处理来自外部系统的引用数据,这些系统不需要知道数据是如何存储的或已经存在的。因此,要上载的JSON数据如下所示:

    data = [
        {"name": "foo", 'key': 'FOO', "resource_type": 'some-resource', 'team_tag': 'ABC1', 'properties': {"foo": "bar"}},
        {"name": "foo2", 'key': 'FOO2', "resource_type": 'some-resource', 'team_tag': 'ABC2'}
    ]
正如您所看到的,没有ID-key和resource_类型是唯一的元组(本质上是一个自然键)。系统应该根据这些是否已经存在进行更新或创建。但是,由于以下假设,我遇到了问题:

  • 正在更新或创建的所有资源(由于POST/PUT/PATCH)
  • 数据将具有“id”属性,并且似乎没有很好的入口点来更改对象的查询/键控方式
  • 创建、验证和保存序列化程序的方式,特别是关于是更新还是创建序列化程序的方式
我早些时候通过让我的视图集从数据库中删除所有相关对象来完成这项工作,然后DRF可以简单地插入新对象。这是一个快速的黑客行为,效率低下,不允许对系统进行任何更改

在尝试实现这一点时,我似乎覆盖了视图集和序列化程序中的许多方法,只是为了使其兼容,这远远超过了我在没有DRF的情况下至少需要的,但如果可能的话,我希望保持它的一致性

我在上也遇到了这个问题,并实现了他们的建议,但也遇到了其他问题,主要是他们同时使用BulkListSerializer和自定义模型序列化器,这两个都需要重写

最后,我需要向视图中添加一些内容来删除或标记任何现在孤立的对象(外部不存在)

是否有一个已知的模式可以用于DRF(B),或者我应该写自己的独立视图


谢谢

看起来您正试图将非模型数据与
ModelSerializer
一起使用


您可能希望改为使用常规序列化程序执行[反]序列化。请参阅。

这并不完全准确,因为传入数据确实与模型的属性匹配,但缺少与现有行匹配的ID属性。这就是它与通常模式的不同之处。我甚至在我的ViewSet中添加了一个部分来添加现有行的id(虽然这似乎效率低下),但它仍然以不同的方式失败,但似乎与我在帖子中提到的DRF ListSerializer错误有关,即我已经开始研究一个简化的示例,遇到了相同的问题。