Django批量更新对象列表

Django bulk update list of objects

我想创建一个 API 端点,您可以在其中 PUT 对象列表,它将像这样工作:

我发现但没有那样工作的东西(其中大部分根本不起作用):

https://github.com/miki725/django-rest-framework-bulk

https://www.django-rest-framework.org/api-guide/serializers/#customizing-multiple-update

django-rest 站点上的示例似乎是这样做的,但它对我不起作用。

我有一个序列化程序:

class InventoryPropertyValuesSerializer(serializers.ModelSerializer):
    added_by = serializers.CharField(source='added_by.username', read_only=True)
    updated_by = serializers.CharField(source='updated_by.username', read_only=True)
    id = serializers.IntegerField(required=False)

    class Meta:
        model = InventoryPropertyValues
        list_serializer_class = CustomBulkListSerializer
        fields = '__all__'

ListSerializer

class CustomBulkListSerializer(serializers.ListSerializer):
    def update(self, instance, validated_data):
        # Maps for id->instance and id->data item.
        value_mapping = {value.id: value for value in instance}
        data_mapping = {item['id']: item for item in validated_data}

        # Perform creations and updates.
        ret = []
        for value_id, data in data_mapping.items():
            value = value_mapping.get(value_id, None)
            if value is None:
                ret.append(self.child.create(data))
            else:
                ret.append(self.child.update(value, data))
        # Perform deletions.
        for value_id, value in value_mapping.items():
            if value_id not in data_mapping:
                value.delete()
        return ret

如果我尝试 运行,我会得到: 'QuerySet' object has no attribute 'pk'

drf-writable-nested 似乎完全符合我在原 post 中所描述的要求。