장고 프로젝트를 하다보면 원하는 테이블에 원하는 모델 데이터를 넣고 싶을 때, 해당 모델의 역참조 foreign key에도 데이터를 동시에 넣고 싶을 때가 있습니다.
저 같은 경우 아래와 같이 스타일 카드 모델과 스타일 카드 모델을 참조하고 있는 스타일 이미지 테이블이 있습니다.
지금 작성하려는 뷰는 스타일 카드를 업로드할 때 입력한 데이터를 DB에 저장해주는 뷰인데요, 스타일 테이블의 메인 데이터를 저장할 때 동시에 foreign key 대상 데이터를 저장하지 않으면 번거로운 일이 생깁니다. 저장했던 스타일 id를 다시 불러와서 스타일 이미지를 저장해줘야하거든요.
그래서 애초에 스타일 데이터를 저장할 때 스타일 이미지도 함께 저장해주면 이러한 번거로움을 해결할 수 있습니다.
django orm에서는 create라는 방식으로 데이터를 생성해서 저장할 수 있는데요, 이 방식으로 객체를 만들어낼 때 이 객체를 변수에 저장하면 객체의 정보를 그대로 가져와 쓸 수 있습니다.
style_id = make.id
이런 방식으로 변수로 만들어진 객체에서 원하는 정보를 가져와서 바로 대입시킬 수 있습니다.
참 편리하죠? 여러분도 잘 이용해보세요!
class StyleUploadView(View):
@login_decorator
def post(self,request):
data = json.loads(request.body)
try:
make = Style.objects.create( # 만들자마자 make라는 변수에 style 객체 저장
description = data['description'],
user_id = request.user.id
)
for image in data['image_url_list']:
StyleImage.objects.create(
image_url = image,
style_id = make.id # 스타일 id에 해당하는 변수의 아이디를 바로 불러와서 저장
except KeyError:
return JsonResponse({"message": "INVALID_KEYS"}, status = 400)
return HttpResponse(status = 200)