다대다 관계에 있는 데이터 추출 및 저장하는 방법

이승연·2022년 1월 7일
0

에러!!!!!!!!

목록 보기
6/7

기존에 있는 데이터 한 열에 존재하는 특정 필드값을 뽑아와서 새로운 데이터를 생성하는 기능이 필요했다.

  1. 다대다 관계에 있는 city라는 필드 빼고는 다 정상적으로 저장이 되었다. city를 따로 빼지 않고 데이터를 생성하려고 하면 다음 에러가 난다. 아직 생성이 완전히 되지 않은 데이터에 다대다 관계를 설정하려고 하니 나는 타입에러이다.:
TypeError at /services/applications/twins/
Direct assignment to the forward side of a many-to-many set is prohibited. Use city.set() instead.
  1. city를 따로 빼서 region_id라는 변수에 할당해준 후에 application.city.add(region_id) 쿼리를 수행하면 다음 에러가 난다. add 어트리뷰트는 인자로 들어온 오브젝트를 인스턴스에 엮어주는 역할을 하는데 다대다 관계가 정의된 위치를 가르키고 있는 manager를 인자로 넣으니 안되는 것이다 :
'manyrelatedmanager' object is not iterable
  1. 따라서 manyrelatedmanager에 all() 어트리뷰트를 붙여주어서 관계가 있는 오브젝트의 id를 리스트로 나열한다:
region_id_list = queryset.city.all().values_list('id', flat=True)

region_id_list를 루프로 돌려서 application.city.add(region_id) 쿼리를 실행해주니 정상적으로 처리되었다.

0개의 댓글