我一直试图找到一种方法来处理DRF中的一些上传数据(有或没有Bulk),以保持与我的其他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_type是唯一的元组(本质上是一个自然键)。系统应根据这些是否已存在进行更新或创建。然而,由于以下假设,我遇到了问题:
我之前通过让我的ViewSet从数据库中删除所有相关对象来完成这项工作,然后DRF可以简单地插入新的。这是一个快速的黑客,效率低下,不允许维持系统的任何变化。
在尝试实现这一点时,似乎我在ViewSets和Serializers中重写了很多方法只是为了使它兼容,远远超过我在最低要求时没有DRF,但我想尽可能保持一致。
我也遇到了https://github.com/miki725/django-rest-framework-bulk/issues/30的问题并实施了他们的建议,但遇到了其他问题,主要是他们使用两个 BulkListSerializer和一个自定义模型序列化器,这两者都需要要被覆盖。
最后,我需要在视图中添加一些内容来删除或标记现在孤立的任何对象(外部不存在)。
是否有一个已知的模式,这可以用于DRF(B),还是我应该写我自己的独立视图?
谢谢!
答案 0 :(得分:0)
您似乎正在尝试将非模型数据与ModelSerializer
一起使用。
您可能希望使用常规序列化程序执行[de]序列化。请参阅my post about that topic。