โ ์ญ์ฐธ์กฐ๋ ?
๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ForeignKey๋ฅผ ๊ฐ์ง๊ณ ์๊ฑฐ๋ N:N ๊ด๊ณ์ธ ์ํฉ, ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ค๋ ๊ฒฝ์ฐ
1) ์ธ๋ ํค ์ง์ ์ related_name ์ต์
์ ์ฌ์ฉํด ์ญ์ฐธ์กฐ ์ ์ฌ์ฉ๋ ์ด๋ฆ์ ์ง์ ํ ์ ์๋ค.
2) releated_name์ ์ง์ ํ์ง ์๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก tablename_set ํํ๋ก ์ง์ ๋๋ค.
๐งฉ ์ ์ฉ ์์
- ex1) `user_profile.hobby` โ ์ ์ฐธ์กฐ
- ex2) `hobby.userprofile_set` โ hobby๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ UserProfile ํ
์ด๋ธ์ object๋ฅผ ์ ธ์ด
- models.py์์ releated_name์ `user_hobby` ๋ก ์ง์ ํ๋ค๋ฉด `hobby.user_hobby`์ ๊ฐ์ด ์ฌ์ฉ
โ serializer๋ ?
django์ ์ ์ฅ๋์ด ์๋ ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ REST API์์ ์ฌ์ฉํ๋ JSON์ ํํ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ผ๋ก create, update ์ validation ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๐งฉ ์ ์ฉ ์์
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
# serializer์ ์ฌ์ฉ๋ model, field์ง์
model = User
# ๋ชจ๋ ํ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ fields = "__all__"๋ก ์ฌ์ฉ
fields = ["username", "password", "fullname", "email"]
from rest_framework.response import Response
from rest_framework import status
from user.serializers import UserSerializer
def get(self, request):
user = request.user
# serializer์ queryset์ ์ธ์๋ก ์ค ๊ฒฝ์ฐ many=True ์ต์
์ ์ฌ์ฉํด์ผ ํ๋ค.
serialized_user_data = UserSerializer(user).data
return Response(serialized_user_data, status=status.HTTP_200_OK)
# return data
"""
{
"username": "user",
"password": "pbkdf2_sha256$320000$u5YnmKo9luab9csqWpzRsa$pKfqHnBiF5Rgdo1Mj9nxNOdhpAl9AhPVXFPXkbPz7Mg=",
"fullname": "user's name",
"email": "user@email.com"
}
"""
permissions.AllowAny
: ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์ ๊ทผ ํ์ฉpermissions.IsAuthenticated
: ๋ก๊ทธ์ธ ๋ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์ ๊ทผ ํ์ฉpermissions.AllowAny
: ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์ ๊ทผ ํ์ฉserializer๋ฅผ ๋ฐฐ์ฐ๊ณ ๋์ ์๋ง ์ด์ฉํ ์ค ์๋ฉด ์ ๋ง ์ฝ๊ณ ๊ฐํธํ๊ฒ ์ํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด ์ ๊ธฐํ๊ณ , ์ด์ ์ต์ํด์ง๋ ค๋ฉด ๋ ๋ง์ด ์ฝ๋๋ฅผ ์ณ๋ณด๊ณ ๋ ๊ณต๋ถํด์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค. ๋ด๊ฐ ์์ฑํ๋ ์ฝ๋๋ ์งง์์ ธ๋ ์ด๋ฅผ ์ดํดํ๋๋ฐ์๋ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ ๊ฑฑ์ ๋์ง๋ง, ํ๋ํ๋ ๊พธ์คํ ๊ณ์ ๊ณต๋ถํ๋ค๋ณด๋ฉด ์ดํด๊ฐ ์์ํด์ง๊ฒ ์ง!
TIL์ด ์ ์ ์งง์์ง์๋ ๊ฒ ๊ฐ์์~