본문으로 바로가기

Django Partial Update 정리

category Coding/Django 2018. 4. 30. 19:02
반응형

범위 : #1-65 Edit a Photo


장고에서는 정보를 업데이트할 때 부분적으로 업데이트 해줄 수 있다.

예를 들어 models.py에 아래와 같은 3가지의 필드가 있다고 가정해본다.


file = models.ImageField()
location = models.CharField(max_length=140)
caption = models.TextField()

시리얼라이저는 아래와 같다.


class InputImageSerializer(serializers.ModelSerializer):
class Meta:
model = models.Image
fields = (
'file',
'location',
'caption',
)

file, location, caption 3가지를 사용하고 있다.

views.py에서 이 serializers를 이용하여 정보를 업데이트해주는 로직도 추가해줬다고 가정한다.

PUT메소드를 오버라이드해서 정보를 수정할건데,

{"caption":"test"} 처럼 file, location, caption 3가지가 아닌 한가지만 업데이트해주려고 하는 경우 에러가 발생한다.


위처럼 file과 location에 값이 없다고 나온다.

이렇게 모든 값을 주는게 아니라 부분적으로 수정해주고 싶은 경우를 위해 장고에서는 Partial Update 기능을 제공한다.

기존에 작성했던게 아래 코드라면,


serializer = serializers.InputImageSerializer(image, data=request.data)


여기에 partial=True 옵션 하나만 추가해주면 된다.


serializer = serializers.InputImageSerializer(image, data=request.data, partial=True)


이렇게 수정을 해준 후 다시 한번 수정을 해보면 {"caption":"hide"}


위처럼 정상적으로 적용이 된다.

핵심은 부분적으로 업데이트 해주고 싶을 때는 partial=True 옵션을 주라는 것.

반응형