본문 바로가기
Coding/Python

Django Rest framework 다른 테이블 Join 시키는 방법

by Hide­ 2018. 2. 6.
반응형

(Django rest framework table join)

요즘 Django Rest framework로 API서버를 구축하고 있다.

리액트 네이티브로 어플을 제작하는 중이라 해당 어플에서 사용하기 위함인데

구축하다보니 몇몇가지 막히는 사항들이 생겼다.

그 중 하나가 오늘 포스팅 할 Join 관련 이슈이다.

예를 들어 아래와 같은 테이블이 있다고 가정한다.


[user]

- userkey(Primary key)

- username


[article]

-articleNo(Primary key)

- userkey(FK to user)

- content


게시판 형태로 뭔가를 구성하고 있는데 article테이블에서 자료를 가져온 후

페이지에 랜더링해줘야 한다.

user테이블에 username(내 어플에선 닉네임이다)이 존재하므로 굳이 article에 넣을 필요가 없다고 판단했고

사용할 때는 user테이블을 조인시켜서 해결하려 했다.

그런데 rest framework 에서는 어떻게 해야 할까 찾아봤더니 조인을 쓰지 말라고 한다.

이유는 장고는 SQL이 아니기 때문이라고 함.

튼 아마 장고의 규칙대로 테이블을 조인시켜라 이런 느낌으로 받아들이면 될 것 같다.

해결방법은 간단하다.

serializers.py 파일을 수정하면 된다.

기존의 내용은 아래와 같다.


class userSerializer(serializers.ModelSerializer):

class Meta:

model = user

fields = ('userkey', 'username')


class articleSerializer(serializers.ModelSerializer):

class Meta:

model = article

fields = ('articleNo', 'userkey', 'content')


여기서 딱 하나의 라인만 추가해주면 된다.


class userSerializer(serializers.ModelSerializer):

class Meta:

model = user

fields = ('userkey', 'username')


class articleSerializer(serializers.ModelSerializer):

userkey = userSerializer(read_only=True)

class Meta:

model = article

fields = ('articleNo', 'userkey', 'content')


userkey에 userSerializer 클래스에서 정의한 부분을 넣어주면 되는 것이다.

그러면 다음과 같이 userkey 하위내용으로 user테이블의 내용이 들어간다.


userkey.username 이런식으로 접근하면 해결된다.


Reference : https://stackoverflow.com/questions/43197964/how-to-join-two-models-in-django-rest-framework