์ค๋์ M:N์ ์ด์ฉํ๊ณ REST API๋ฅผ ํ์ฉํ ํ์ด์ง ๊ตฌํ์ ํ์๋ค.
์ฌ์ค M:N์ ๊ฐ๋ ์ด ์์ง ๋ช ํํ๊ฒ ์ ๋ฆฝ๋์ง ์์์ models.py์ serializers.py๋ฅผ ์์ฑํ๋๋ฐ ํ๋ค์๋ค.
๋ํ,
python manage.py loaddata movies/actors.json movies/movies.json movies/reviews.json
ํ ๋ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๊ทธ๋์ models.py ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
from django.db import models
# Create your models here.
class Actor(models.Model):
name = models.CharField(max_length=100)
class Movie(models.Model):
title = models.CharField(max_length=100)
overview = models.TextField()
release_date = models.DateTimeField()
poster_path = models.TextField()
actors = models.ManyToManyField(Actor,related_name='actors')
class Review(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
movie = models.ForeignKey(Movie,on_delete=models.CASCADE)
์์ ์ค๋ฅ๋ฅผ ๊ณ ์น๊ณ admin์ ๋ฑ๋กํ๋ ค๊ณ ํ๋ ๋ ํ ๋ฒ ์ค๋ฅ๋ฅผ ๋ง๋ฌ๋ค.
๋ชจ๋ธ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๊ฒ๋ค์ callํด์ฌ ์ ์๋ค๋ ์ค๋ฅ๋ฅผ ๋ง๋ฌ๋ค.
์ฒ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์ ์์๋ค.
from django.db import models
# Create your models here.
class Actor(models.Model):
name = models.CharField(max_length=100)
class Movie(models.Model):
title = models.CharField(max_length=100)
overview = models.TextField()
release_date = models.DateTimeField()
poster_path = models.TextField()
actors = models.ManyToManyField(Actor,related_name='movies')
class Review(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
movie = models.ForeignKey(Movie,on_delete=models.CASCADE)
๊ทธ๋์ ์ด ๊ตฌ๋ฌธ์ด ์๋ชป ๋์์์ ์ธ์งํ๋ค.
์ด์ฐจํผ ๋ชจ๋ธ์ ๋ค ๋ถ๋ฌ์ฌ๊ฑฐ๋๊น model๋ฑ๋ก์ ๋ค ํ๋ฉด ๋๋ค๋ ์๊ฐ์ด ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊พธ๋ ์๋ฒ๋ ์ ๋๋ก ์ผ์ง๊ณ admin ์ฌ์ดํธ๋ ์ ๋๋ก ๋์๋ค.
from django.contrib import admin
from .models import Movie,Actor,Review
# Register your models here
admin.site.register(Actor)
admin.site.register(Movie)
admin.site.register(Review)
๊ทธ๋์ ์ด ๊ตฌ๋ฌธ์ด ์๋ชป ๋์์์ ์ธ์งํ๋ค.
์ด์ฐจํผ ๋ชจ๋ธ์ ๋ค ๋ถ๋ฌ์ฌ๊ฑฐ๋๊น model๋ฑ๋ก์ ๋ค ํ๋ฉด ๋๋ค๋ ์๊ฐ์ด ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊พธ๋ ์๋ฒ๋ ์ ๋๋ก ์ผ์ง๊ณ admin ์ฌ์ดํธ๋ ์ ๋๋ก ๋์๋ค.
๊ทธ๋ฆฌ๊ณ detailํ์ด์ง์์ ์ํ ๋ฐฐ์ฐ๋ฅผ ๋๋ฅด๋ฉด ๊ทธ ์ํ๋ฐฐ์ฐ์ ์ํ๋ชฉ๋ก์ด ๋์์ผํ๋๋ฐ ์ ๋์ค์ง ์์์ ๋งค์ฐ ํ๋ค์๋ค.
serializers.py๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ด ํด๊ฒฐํ์๋ค.
class๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ๋ด๊ฐ ๋ถ๋ฌ์ค๊ณ ์ ํ๊ฑฐ๋ฅผ ๋ค์ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ด๋ค.
from rest_framework import serializers
from .models import *
class ActorListSerializer(serializers.ModelSerializer):
class Meta:
model = Actor
fields = ('id' , 'name')
class MovieListSerializer(serializers.ModelSerializer):
class Meta:
model = Movie
fields = ('title','overview')
class ActorSerializer(serializers.ModelSerializer):
movies = MovieListSerializer(many = True, read_only = True)
class Meta:
model = Actor
fields = ('id','movies','name')
class MovieSerializer_actor(serializers.ModelSerializer):
class Meta:
model = Actor
fields = ('name',)
class MovieSerializer(serializers.ModelSerializer):
actors = MovieSerializer_actor(many = True, read_only = True)
class Meta:
model = Movie
fields = '__all__'
class ReviewListSerializer(serializers.ModelSerializer):
class Meta:
model = Review
fields = ('title','content')
class ReviewSerializer_movie(serializers.ModelSerializer):
class Meta:
model = Movie
fields = ('title',)
class ReviewSerializer(serializers.ModelSerializer):
movie = ReviewSerializer_movie(read_only=True)
class Meta:
model = Review
fields = '__all__'
์ด์ ์๋ Django REST Framework์ 1:N ๊ด๊ณ๊น์ง๋ฐฐ์ ๋ค๋ฉด ์ค๋์ M:N ๊ด๊ณ๋ฅผ ์ด์ฉํด์ Manytofield๋ฅผ ์ฌ์ฉํด ์ฃผ์๋ค.
์์ง ์ด ๋ถ๋ถ์ ๋์๊ฒ ์ข ์ด๋ ค์ด ๊ฑฐ ๊ฐ์ ์ฃผ๋ง ๋์ ๊ณต๋ถ๋ฅผ ๋ ํด๋ด์ผ๊ฒ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ์๋ช
์ ์ ์ ์ด์ฃผ์ด์ผ๊ฒ ๋ค....
pk๋ฅผ ๋ถ๋ฌ์ฌ ๋ `s`ํ๋ ๋นผ๋จน์ด์ ์ค๋ฅ ์ฐฝ์ด ๊ณ์ ๋ง๋ฌ๋ค.
์ค๋ ๊ณผ์ ํ๋ํ๋๋ง๋ค ์ค๋ฅ ์ฐฝ์๋ง๋ฌ๋๋ฐ ์์ง๋ ์ค๋ฅ ์ฐฝ์ด ํฌ๊ฒ ๋ฐ๊ฐ์ง๋ ์์ง๋ง ์ค๋ฅ๋ฅผ ํ๋์ฉ ํด๊ฒฐํด ๋๊ฐ ๋๋ง๋ค ๋ฟ๋ฏํจ์ด ๋๊ปด์ง๋ค.
'๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.27.์ (0) | 2022.05.02 |
---|---|
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.25.์ (0) | 2022.04.25 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.21.๋ชฉ (0) | 2022.04.21 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.20.์ (0) | 2022.04.20 |
๐๐จ๐๐๐ฒ ๐ ๐๐๐๐ซ๐ง 2022.04.19.ํ (0) | 2022.04.19 |
๋๊ธ