2014-11-30 4 views
1

부분적으로 partial=True으로 인스턴스를 업데이트하려고하지만 어떤 속성이 누락 되어도 This field cannot be blank.이라는 오류가 발생합니다. 난 partial=True 부분적인 업데이 트를 가능하게 생각. 내가 여기서 뭔가를 놓치고 있니? 값이 비어있을 수 있습니다 만 시리얼의 필드의 하위 집합을 업데이트 부분 업데이트, 및 비 필수 필드 사이의 차이가 있습니다부분적으로 올바르게 업데이트하는 방법?

class MySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = MyModel 
     fields = ('meta_name', 'meta_num_files', 'meta_total_length') 
... 
class MyViewClass(APIView): 
    def post(self, request): 
     instance = get_object_or_404(MyModel, foo='foo') 
... 
     serializer = MySerializer(instance, data, partial=True) 
... 
self.client.post(reverse('api_meta', data={'meta_name': '', 
              'meta_total_length': 1000000, 
              'meta_num_files': 10 
              } 
            ) 
+0

빈 칸을 포함하지 않으면 이런 현상이 발생합니까? –

답변

2

.

부분 업데이트를 사용하는 경우 클라이언트는 serializer의 필드 하위 집합 만 보낼 수 있으며 serializer에는 존재하지 않는 항목이 필요하지 않습니다. 이것은 일부 유효성 검사를 생략하는 부작용이 있지만 요청에 포함되지 않은 필드가 이미 모델에 존재할 것으로 예상합니다. 요청과 함께 전달 된 필드 만의 유효성을 검사하고 해당 필드 만 모델에서 업데이트됩니다.

대신 공백 값을 사용하여 키를 전달하지 않은 경우 모두입니다. 이 부분 업데이트 상황에서 완벽하게 나타나는 필드의 값을 지우려고하므로 Django REST Framework는 빈 필드에서 유효성 검사를 실행합니다. 이것은 어디서나 문서화 된 것으로 보이지 않지만 Django REST Framework가 유효성 검사를 실행할 필드를 결정하는 방법입니다.

필드에 empty=True이 지정되어 있지 않으므로 장고 REST 프레임 워크는 해당 필드가 필수 입력란임을 인식하고 비워 둘 수 없습니다. 그래서 This field cannot be blank이라고하는 오류가 발생하는 경우 필드의 값을 지우라고 알려줍니다.

관련 문제