inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

is_valid()과정에서 validated_data에 데이터가 유실됩니다

미해결

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

안녕하세요? 이렇게 빨리 질문을 다시 드릴 줄 몰랐네요 ㅠㅠ is_valid()과정에서 데이터가 유실되는데, 도무지 이유를 모르겠어서 질문을 드립니다. view 부분은 다음과 같습니다 (편의를 위해data를 그냥 따로 만들었습니다. def perform_create ( self , serializer ): data = { ' delivery_location ' : ' test_location ' , ' delivery_date ' : ' 2022-10-10 ' , ' orderedproducts ' : [ { ' product_id ' : 3 , ' count ' : 3 }, { ' product_id ' : 4 , ' count ' : 3 } ], } serializer = self . get_serializer ( data = data) serializer .is_valid( raise_exception = True ) print ( serializer .validated_data) serializer .save() return serializer .data 여기서 print문의 결과로 다음과 같이 출력됩니다.orderedproducts내부에 있어야 할 product_id가 사라져 잇더라구요..아무리 검색해봐도 이유가 나오지 않아서 ㅠㅠ 한번 여쭈어 봅니다. OrderedDict([('delivery_location', 'test_location'), ('delivery_date', datetime.date(2022, 10, 10)), ('orderedproducts', [OrderedDict([('count', 3)]), OrderedDict([('count', 3)])])]) 혹시 몰라 시리얼라이저와 모델을 같이 적습니다. 시리얼라이저는 다음과 같습니다 class OrderedProductSerializer ( serializers . ModelSerializer ): product_name = serializers. CharField ( source = ' product.product_name ' , read_only = True ) class Meta : model = OrderedProduct fields = [ " product_id " , " count " , " product_name " ] class PackageOrderSerializer ( serializers . ModelSerializer ): orderedproducts = OrderedProductSerializer ( many = True ) class Meta : model = PackageOrder fields = [ " id " , " delivery_location " , " delivery_date " , " is_packaging " , " orderedproducts " ] def create ( self , validated_data ): print ( " validated_data : " , validated_data ) orderedproducts_data = validated_data .pop( ' orderedproducts ' ) packageorder = PackageOrder .objects. create ( ** validated_data ) for products_data in orderedproducts_data: OrderedProduct .objects. create ( package_order = packageorder, ** products_data) return packageorder 모델은 다음과 같습니다 #models.py class OrderedProduct ( TimeStampedModel ): package_order = models. ForeignKey ( ' PackageOrder ' , on_delete = models. CASCADE , related_name = ' orderedproducts ' ) product = models. ForeignKey ( ' products.Product ' , on_delete = models. CASCADE ) count = models. BigIntegerField () class Meta : db_table = ' ordered_products ' class PackageOrder ( TimeStampedModel ): delivery_location = models. CharField ( max_length = 100 ) delivery_date = models. DateField () is_packaging = models. CharField ( max_length = 100 , blank = True , null = True ) class Meta : db_table = ' package_orders ' OrderedProduct 모델이 다른 두개의 테이블을 참조하는 중간테이블처럼 사용되는 게 이유가 아닐까..짐작은 해보고 있습니다.. 정 안되면 body데이터를 pop을 활용해 빼내고 context를 통해 데이터를 전해주는 방식을 사용할까 고민중이긴 한데 정확한 이유는 알고 싶어서 질문 드립니다. 감사합니다~

  • is_valid
  • docker
  • validated_data
  • django
  • drf
  • python
  • react
김영빈 댓글 2 좋아요 0 조회수 804

인기 태그

인프런 TOP Writers

주간 인기글