DRF 객체 저장시 nested object 매핑 문제
안녕하세요. 현재 drf 를 사용하여 api 개발을 공부중입니다.
현재 1:n 관계인 두개의 테이블에서 N측 테이블의 데이터를 저장할 때 기존에 존재하던 1측 테이블의 레코드와 관계를 생성하여 매핑하고자 합니다. 이런 저런 방법을 계속 시도하였으나 참조하는 테이블의 객체를 알맞게 매핑하는데 자꾸 실패하여 질문을 남깁니다.
class Company(models.Model):
company_name = models.CharField(max_length=30)
nationality = models.CharField(max_length=20)
region = models.CharField(max_length=40)
class Recruitment(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
position = models.CharField(max_length=20)
reward = models.IntegerField()
info = models.TextField()
skill = models.CharField(max_length=30)
Company 모델과 이를 참조하는 Recruitment 모델입니다
class CompanySerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = '__all__'
class RecruitmentSerializer(serializers.ModelSerializer):
company = CompanySerializer()
class Meta:
model = Recruitment
fields = '__all__'
depth = 1
각 모델의 serializer입니다,
class RecruitmentListView(APIView):
def post(self, request):
company_obj = Company.objects.get(pk=request.data.get('company')['id'])
#1. 참조하는 company 객체를 찾아 새로운 Recruitment 객체를 생성하고, company 객체를 연결지어 serialize한다
#2. RecruitmentSerializer의 is_valid 혹은 다른 메소드를 오버라이딩하여 request를 serializer로 전달하여 저장한다
#기타 등등
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(status=status.HTTP_400_BAD_REQUEST)
공식 문서, 유튜브 영상, 외국 사이트등을 찾아보았지만 기존에 존재하던 테이블을 참조하며 새로운 객체를 저장하는 방법이 있질 않더군요... 혹시 해결 방법을 아시면 답변 부탁드리겠습니다.
참고로 request는
{
"company": {
"id": 1,
"company_name": "company1",
"nationality": "korea",
"region": "seoul"
},
"position": "백엔드",
"reward": 100000,
"info": "test",
"skill": "django"
} 이런식으로 생각하고 있습니다