2017-10-04 15 views
0

새 필드를 만들려면 serializer에서 많이 사용하고 있습니다. 새로운 필드를 추가하고 기존 필드를있는 그대로 두려면 업데이트를 구현해야합니다. Mycode는 아래와 같습니다. 통과하는 동안 모델 이름을 제공하여 장고의 업데이트 지원을 사용하려고많은 수의 serializer 업데이트 = django api에서는 True 만 생성이 지원됩니다.

class AppSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Apps 
     fields = ('app_name', 'auth_token_id') 

    def create(self, validated_data): 
     if "auth_token_id" in self.context: 
      id1 = self.context["auth_token_id"] 
      instance = self.Meta.model(**validated_data) 
      user_id = id1 
      if user_id is not None: 
       instance.auth_token_id = user_id 
       instance.save() 
      return instance 

views.py

@api_view(['POST']) 
def add_apps(request): 
    data = request.data 
    auth_token = request.META.get('HTTP_AUTHTOKEN', '') 
    auth_tok = Device.objects.get(auth_token=auth_token) 
    a_id = auth_tok.id 
    serializer = AppSerializer(ThirdPartyApps, data=data, context={"auth_token_id": a_id}, many=True) 
    if serializer.is_valid(): 
     serializer.save() 
     content = collections.OrderedDict(
       [('status', True), ('message', "Third party apps are saved")]) 
     return Response(content, status=status.HTTP_200_OK) 
    else: 
     return Response(serializer.errors) 

models.py

class Device(models.Model): 
    device_id = models.CharField(max_length=200) 
    auth_token = models.CharField(max_length=100) 


class ThirdPartyApps(models.Model): 
    auth_token = models.ForeignKey(Device, on_delete=models.CASCADE) 
    app_name = models.CharField(max_length=100) 

serializers.py 업데이트 메서드를 호출하는 serializer에 전달합니다. 그러나 many = True 일 때 update가 지원되지 않는다는 것은 create 메소드 만 지원된다는 것입니다. ListSerializer 클래스를 사용하고 serializer에서 .update()를 재정의하는 것이 좋습니다. 나는 그것을 어떻게 사용하는지 이해할 수 없다. 방금 내 필드를 업데이트하고 싶습니다.

답변

1

serializer 인스턴스화 인수는 Model이 아닌 인스턴스 여야합니다.

serializer = AppSerializer(ThirdPartyApps, data=data, context={"auth_token_id": a_id}, many=True) 

ThirdPartyApps을 업데이트 할 인스턴스 목록으로 바꿔야합니다.

여러 업데이트를 처리하는 방법에 대해서도 documentation을 따라야합니다.

+0

정확하게 똑같은 방식으로 시도했지만 many = True 일 경우 생성 만 지원하지만 업데이트는 지원하지 않습니다. 이미 설명서 링크를 통해 갔지만 인스턴스 serializer에 명시 적 id 필드를 추가하는 방법을 이해할 수 없습니다. –

+0

이 오류가 발생합니다 - serializers many = True 함께 여러 업데이트를 기본적으로 여러 작성을 지원하지 않습니다. 업데이트의 경우 삽입 및 삭제를 처리하는 방법이 명확하지 않습니다. 여러 업데이트를 지원해야하는 경우 ListSerializer 클래스를 사용하고 .update()를 재정 의하여 비헤이비어를 정확하게 지정할 수 있습니다. –

+0

초기 질문에서 이드를 언급하지 않았습니다. 설명서에 설명 된대로 업데이트 기능을 제공하지 않았습니다. 그 질문을 닫고 새 질문을 시작하십시오. – Linovia