当前位置: 首页 > 面试题库 >

如何在Django API中一次更新多个记录(批量更新)

邹麻雀
2023-03-14
问题内容

我需要在一个请求categories中进行多次更新Article

ArticleViewSet我有:

def get_serializer_class(self):
    if self.action in ['partial_update', 'update']:
        return ArticlePostSerializer
    return ArticleSerializer

因此ArticlePostSerializer需要进行更改。

这是我的序列化器代码

class ArticleShortCategorySerializer(serializers.ModelSerializer):

    class Meta:
        model = Category
        fields = 'id', 'name'


class ArticleSerializer(serializers.ModelSerializer):
    categories = serializers.SerializerMethodField()

    def get_categories(self, obj):
        return ArticleShortCategorySerializer(obj.categories, many=True).data

    class Meta:
        model = Article
        read_only_fields = 'id'
        fields = ('categories', 'text') + read_only_fields


class ArticlePostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Article
        fields = 'id', 'categories', 'text'

我试图添加:

class ArticlePostListSerializer(serializers.ListSerializer):

class Meta:
    list_serializer_class = ArticlePostListSerializer

但这不起作用。如何更改此代码以进行多次更新。我的json请求

{
    [id: 90, categories: [10,12,14]],
    [id: 93, categories: [10,12,14]],
    [id: 95, categories: [10,12,14]]
}

问题答案:

这是您请求的CreateMixins或UpdateMixins的示例。

======================查看========================== ======

class OrderCreate(mixins.CreateModelMixin,viewsets.GenericViewSet):
    pagination_class = None

    def get_queryset(self):
        return []

    def get_serializer_class(self):
        return serializers.OrderSerializer

=======================序列化器=========================== ===

class OrderDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = crm_models.OrderDetail
        fields = (
                'product',
                'quantity',
                'rate_per_unit',
                'order_quantity'
                )

class OrderSerializer(serializers.ModelSerializer):
    order_details = OrderDetailSerializer(many = True)
    class Meta:
        model = crm_models.OrderMaster
        fields = (
                'order',
                'invoice_number',
                'client',
                'beat_check',
                'target_customer',
                'order_editor_client_employee',
                'order_marked',
                'order_saved',
                'edit_marked',
                'edit_saved',
                'adhoc',
                'order_details'
                )

    def create(self, validated_data,*args,**kwargs):
        ordersdetails_data = validated_data.pop('order_details')
        user = None
        request = self.context.get("request")
        if request and hasattr(request, "user"):
            user = request.user
            validated_data['client'] = user.client
            validated_data['order_editor_client_employee'] = user
            validated_data['adhoc'] = validated_data['adhoc'] if 'adhoc' in validated_data else False

        orderObj = super(OrderSerializer, self).create(validated_data,*args,**kwargs)
        orderdetails = []
        for details in ordersdetails_data:
            orderdetails.append(crm_models.OrderDetail(
                product= details['product'],
                quantity = details['quantity'],
                rate_per_unit = details['rate_per_unit'],
                order_quantity = details['order_quantity'],
                order = orderObj
            ))
        crm_models.OrderDetail.objects.bulk_create(orderdetails)
        return orderObj

在“更新视图”功能名称将被更改为“更新”的情况下,您可以找到更多文档 http://www.django-rest-
framework.org/api-guide/generic-views/#createmodelmixin



 类似资料:
  • 我想更新值。如何在查询生成器中执行此操作?

  • 我想更新postgres表的一列。记录大约有5500万条,所以我们需要在10000条记录中更新它。注意:我们要更新所有行。但我们不想锁桌子。 我正在尝试以下查询- 我们如何为每10000条记录更新做一个循环? 如有任何建议和帮助,将不胜感激。 PostgreSQL 10.5

  • 我知道以前有人问过这个问题,我已经阅读了很多答案,现在正在研究其中一个答案,但是我需要以下代码的帮助。 我在执行时没有收到任何错误,也没有任何内容提交到mysql表,如果你发现了什么,请告诉我,或者如果有更好的方法,请你给我指一个教程,我还没有太多的PDO或多行更新。 提前谢谢。 致山姆: 产出为:

  • 我在另一个表(如ac)中有大约88k条记录。我想将表ac的一列更新到主表(如tbl)中。Eg-Table tbl示例记录,如 col1 col2 col3 col4 表ac中的样本记录如下 col1 col3` 如何从ac表更新tbl值。使记录看起来像 col1 col2 col3 col4

  • 我正在使用DynamoDB,我需要更新多条记录上的特定属性。用伪语言编写我的需求时,我希望执行这样一个更新:“update table persons set relationshipStatus='where personKey in(key1,key2,key3,...)”(假设personKey是DynamoDB表中的键)。 换句话说,我想用一个In子句进行更新,或者我想可以称之为批处理更新

  • 问题内容: 我试图: 根据搜索条件查找文档, 如果找到,请更新一些属性 如果没有插入带有某些属性的文档。 我正在使用,因为我也在执行单个插入操作。我想在一次操作中完成所有操作。 但是,它什么都不会导致为更新/向上插入操作插入任何内容。 这是插入文档: 这是最新资料: 这就是我试图更新/更新的方式: 为什么不更新/更新呢? 注意 那是使用水线ORM的JS代码,它也使用mongodb本机驱动程序。 问