새 필드를 만들려면 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()를 재정의하는 것이 좋습니다. 나는 그것을 어떻게 사용하는지 이해할 수 없다. 방금 내 필드를 업데이트하고 싶습니다.
정확하게 똑같은 방식으로 시도했지만 many = True 일 경우 생성 만 지원하지만 업데이트는 지원하지 않습니다. 이미 설명서 링크를 통해 갔지만 인스턴스 serializer에 명시 적 id 필드를 추가하는 방법을 이해할 수 없습니다. –
이 오류가 발생합니다 - serializers many = True 함께 여러 업데이트를 기본적으로 여러 작성을 지원하지 않습니다. 업데이트의 경우 삽입 및 삭제를 처리하는 방법이 명확하지 않습니다. 여러 업데이트를 지원해야하는 경우 ListSerializer 클래스를 사용하고 .update()를 재정 의하여 비헤이비어를 정확하게 지정할 수 있습니다. –
초기 질문에서 이드를 언급하지 않았습니다. 설명서에 설명 된대로 업데이트 기능을 제공하지 않았습니다. 그 질문을 닫고 새 질문을 시작하십시오. – Linovia