๐ก ๊ณผ์
- ์ ํ ์ด๋ธ ๊ตฌ์ฑ์ ํ ๋๋ก
models.py
๋ฅผ ์์ฑํด์ฃผ์ธ์.- ๋ฑ๋ก๋ ๋ฐฐ์ฐ ๋ชฉ๋ก์ ๋ฆฌํดํด์ฃผ๋ GET ๋ฉ์๋๋ฅผ ๊ตฌํํด์ฃผ์ธ์.
- ๋ฐฐ์ฐ์ ์ด๋ฆ, ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ถ์ฐํ ์ํ ์ ๋ชฉ ๋ชฉ๋ก
- ๋ฑ๋ก๋ ์ํ ๋ชฉ๋ก์ ๋ฆฌํดํด์ฃผ๋ GET ๋ฉ์๋๋ฅผ ๊ตฌํํด์ฃผ์ธ์.
- ์ํ์ ์ ๋ชฉ, ์์์๊ฐ, ์ถ์ฐํ ๋ฐฐ์ฐ ๋ชฉ๋ก (์ด๋ฆ๋ง)
from django.db import models
class Actor(models.Model) :
first_name = models.CharField(max_length=45)
last_name = models.CharField(max_length=45)
date_of_birth = models.DateField()
class Meta :
db_table = 'actors'
class Movie(models.Model) :
title = models.CharField(max_length=45)
release_date = models.DateField()
running_time = models.PositiveIntegerField()
actors = models.ManyToManyField('Actor', related_name = movies)
class Meta :
db_table = 'movies'
import json
from django.http import JsonResponse
from django.views import View
from actor.models import Actor, Movie
class ActorView(View) :
def post(self, request) :
data = json.loads(request.body)
Actor.objects.create(
first_name = data['first_name'],
last_name = data['last_name'],
date_of_birth = data['date_of_birth'])
return JsonResponse({'message' : 'created'}, status = 201)
def get(self, request) :
actors = Actor.objects.all()
results = []
for actor in actors :
movie_list = [{'id' : movie.id,
'title' : movie.title } for movie in actor.movies.all()]
actor_name = actor.first_name + actor.last_name
results.append({'name' : actor_name,
'movies' : movie_list })
return JsonResponse({'results' : results}, status = 200)
class MovieView(View) :
def post(self, request) :
data = json.loads(request.body)
if not Actor.objects.filter(id=data['actor_id']).exist() :
return JsonResponse({'message' : 'actor_does_not_exists'}, status = 404)
actor = Actor.objects.get(id=data['actor_id'])
actor.movies.create(
title = data['title'],
release_date = data['release_date'],
running_time = data['running_time'])
return JsonResponse({'message' : 'created'}, status = 201)
def get(self, request) :
movies = Movie.objects.all()
results = []
for movie in movies :
actor_list = [{'id' : actor.id,
'name' : actor.last_name + actor.first_name }for actor in movie.actors.all() ]
results.append({'title' : movie.title,
'running_time' : movie.running_time,
'actors' : actor_list })
return JsonResponse({'results' : results}, status = 200)
manytomanyfield
์ post
์ get
๋ชจ๋ ์์ฑ . .
์ฐธ์กฐ์ ์ญ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ํ์
ํ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋ค. ํนํ ์ ์ผ ์ด๋ ค์ ๋ ๋ถ๋ถ์
MovieView์ post์๋ค .. ^^
Movie.objects.create()๊ฐ ์๋ ์ญ์ฐธ์กฐ(actor.movies.create)๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํ๋ค.
# http request message
http -v POST 127.0.0.1:8000/movies title='๋ฐ์ ' release_date=2016-09-27' running_time=140 actor_id=6
#์คํจํ ์ฝ๋
Movie.objects.create(
title = data['title'],
release_date = data['release_date'],
running_time = data['running_time'],
actor_id = data['actor_id'] )
#์ฑ๊ณตํ ์ฝ๋
actor = Actor.objects.get(id=data['actor_id']
actor.movies.create(
title = data['title'],
release_date = data['release_date'],
running_time = data['running_time'])
MovieView ํด๋์ค์ post ํจ์๋ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์๋ต๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ฒ ๋๋ค. (์ ๋ ฌ์ ์ ๋ผ์๋๊ฑฐ์ง ..?)
์ด์ธ์๋ ์ฑ๊ณผ ์ด๋ฆ์ ๋ถ์ด๋ ์์
์ด ์ด๋ ค์ ๋ค. for๋ฌธ์ ์์น์ํค๊ธฐ๊ฐ ์ ๋งคํด์ ธ์ ๊ณ ์ํ๋ค.
get ํจ์์์ list comprehension์ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ๋ ์งง๊ฒ ์ค์ผ ์ ์์ ๊ฒ ๊ฐ๊ธดํ๋ฐ,
๊ทธ๋ ๊ฒ ํ๋ฉด ์ฝ๋ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง ๊ฒ ๊ฐ์์ ๊ทธ๋ฅ ๋๊ธฐ๋ก ํ๋ค.
๋จธ๋ฆฌ๊ฐ ์ํ๋งํผ ์์ฑ์์ผฐ์ ๋ ์พ๊ฐ์ด ์์ฒญ๋ . . ํฌ๋ฃจ๋ ๊ณผ์ ์๋ค.
๋นจ๋ฆฌ ์์คํ๊ทธ๋จ์ผ๋ก ๋์ด๊ฐ๊ณ ์ถ๋ค .. ํํ