2017-12-14 12 views
3

에서 여러 레코드를 업데이트하는 나는 하나 개의 요청에 많은 Articlecategories을 업데이트해야합니다. ArticleViewSet에서어떻게 한 번 (대량 업데이트) 장고 API

나는이 :

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' 

내가 추가하려고 :이 작업을 doen't

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]] 
} 
+0

사용을 찾을 수 있습니다 업데이트로 변경된다 믹스를 만들려면 –

+0

보기에서 create mixins.CreateModelMixin을 사용하고 Serializers에서 Create 메서드를 재정의합니다. 또는 당신은 get_queryset에서 업데이트 작업을 할 수 있지만 그건 나쁜 생각 일 것입니다. –

+0

@AnupYadav 예제 코드를 어떻게 할 수 있습니까? 나는 djnago에 새로운 사람입니다. 나는'mixins.CreateModelMixin' 또는'mixins.UpdateModelMixin'을 사용해야하므로 레코드를 업데이트해야합니까? – pelcomppl

답변

1

는 CreateMixins 또는 사용자가 요청한 UpdateMixins의 샘플입니다.

======================= VIEW ====================== = 0125. ==================== 업데이트보기 기능 이름으로

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

+0

귀하의 코드에서'Order'에'OrderDetail'을 추가 할 수 있다는 것을 알고 있습니다. 하지만 여러 개의 '주문'레코드를 업데이트해야합니다. – pelcomppl

+0

당신은 내 논리를 사용하여이 작업을 수행 할 수 있습니다. 대부분 당신은 RAW 작업을해야합니다. 기본적으로 JSON을 통해 클라이언트가 게시 한 모든 데이터를 얻을 수있는 요청을 받아야합니다. 사용자 정의 유효성 검사를 추가 할 수도 있습니다. –

+0

이 요청을 보내야하는 URL은 무엇입니까? 단일 업데이트 (ID 포함)와 동일합니까? – pelcomppl