[Django] C.R.U.D (2) Assignment Review Owner & Dog

juriยท2021๋…„ 7์›” 22์ผ
0

Django

๋ชฉ๋ก ๋ณด๊ธฐ
8/11
post-thumbnail

๐Ÿ“˜ Django C.R.U.D (2) Assignment Review

๐Ÿ’ก ๊ณผ์ œ

post
1. ์‹ ๊ทœ ์ฃผ์ธ ๋“ฑ๋ก
2. ๊ฐ•์•„์ง€ ๋“ฑ๋ก (์ฃผ์ธ์ •๋ณด ํ•„์š”)
get
1. ์ฃผ์ธ ๋ฆฌ์ŠคํŠธ
- ์ด๋ฆ„, ์ด๋ฉ”์ผ, ๋‚˜์ด ํฌํ•จ
2. ๊ฐ•์•„์ง€ ๋ฆฌ์ŠคํŠธ
- ์ด๋ฆ„, ๋‚˜์ด, ์ฃผ์ธ ์ด๋ฆ„ ํฌํ•จ
3. ์ฃผ์ธ ๋ฆฌ์ŠคํŠธ (1๋ฒˆ ์ฝ”๋“œ์— ์ถ”๊ฐ€)
- ์ด๋ฆ„, ๋‚˜์ด ํฌํ•จ, ํ‚ค์šฐ๋Š” ๊ฐ•์•„์ง€ ๋ฆฌ์ŠคํŠธ (์ด๋ฆ„, ๋‚˜์ด ํฌํ•จ)

(1) Models

from django.db import models

class Owner(models.Model) :
    name = models.CharField(max_length=45)
    email = models.CharField(max_length=300)
    age = models.PositiveIntegerField()
    
    class Meta :
        db_table = 'owners'

class Dog(models.Model) :
    name = models.CharField(max_length=45)
    age = models.PositiveIntegerField()
    owner = models.ForeignKey('Owner', on_delete=models.CASCADE)
    
    class Meta :
        db_table = 'dogs'

(2) Views

import json

from django.http import JsonResponse
from django.views import View

from owners.models import Owner, Dog

class OwnerView(View) :
    def post(self, request) :
        data = json.loads(request.body)
    
        Owner.objects.create(
    				name  = data['name'],
        			email = data['email'],
      				age   = data['age'])
        return JsonResponse({'message':'created'}, status=201)
    
    def get(self, request) :
        owners = Owner.objects.all()
        results = []
        for owner in owners :
            dogs = owner.dog_set.all().values('name', 'age')
            results.append( {   
            			'name'  : owner.name,
                       		'email' : owner.email,
                    		'age'   : owner.age,
                   	        'dog'   : [dog for dog in dogs } )
        return JsonResponse({'results' : results}, status = 200)

class DogView(View) :
    def post(self, request) :
       data = json.loads(request.body)
       if not Owner.objects.filter(id=data['owner_id']).exists() :
           return JsonResponse({'message' : 'owner_does_not_exist'}, status = 404 )
       
       #Dog.objects.create() ๋ฅผ ์จ๋„ ๊ฐ™์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฐ€๋Šฅ 
       owner = Owner.objects.get(id=data['owner_id'])
       owner.dog_set.create( name = data['name'],
       			      age = data['age'])
       return JsonReponse({'message' : 'created'}, status = 201 )
       
   def get(self, request) :
       dogs = Dog.objects.all()
       results = []
       for dog in dogs :
           results.append(  {'name' : dog.name,
           		      'age' : dog.age,
                            'owner' : dog.owner.name })
       return JsonResponse({'results' : results},  status = 200 )

๐Ÿ›  Review

  • exists() :
    ์ฟผ๋ฆฌ์…‹์— ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด 'True'๋ฅผ ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด 'False'๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    get์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋ฉด ๋ฐ˜ํ™˜๊ฐ’์ด ์ฟผ๋ฆฌ์…‹์ด ์•„๋‹ˆ๊ธฐ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    exists๋ฅผ ์‚ฌ์šฉํ•  ๋• ์ฟผ๋ฆฌ์…‹ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” filter์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • values() : ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ์…‹์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์‘๋‹ต ๋ฉ”์„ธ์ง€์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ธํŒจํ‚น์„ ํ•ด์•ผํ•œ๋‹ค.

#์‹คํŒจํ•œ ์ฝ”๋“œ
for owner in Owner.objects.all() :
    dogs = Dog.objects.get(id=data['owner_id']
    dog_list = [dog.values('name', 'age') for dog in dogs]
#์„ฑ๊ณตํ•œ ์ฝ”๋“œ
for owner in Owner.objects.all() :
    dogs= owner.dog_set.all().values('name', 'age')
    dog_list = [dog for dog in dogs]

์‹ค์ œ views.py์—์„œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•  ๋• list comprehension์„ ์ด์šฉํ•ด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋Š” ๋น„๊ต๊ฐ€ ์‰ฝ๊ฒŒ ํ’€์–ด์จ๋ณด์•˜๋‹ค.

์œ„์˜ ์ฝ”๋“œ๋Š” Django C.R.U.D (2) ์˜ ๋˜ ๋‹ค๋ฅธ ๊ณผ์ œ์ธ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„์˜ ๋ชจ๋ธ์—์„œ ์ž‘์—…ํ•œ ์ฝ”๋“œ๋‹ค. ์ด ์ฝ”๋“œ๋„ values() ๋ฅผ ์ด์šฉํ•ด์„œ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

for actor in actors :
    movie_list = [ movie for movie in actor.movie_set.all().values('id', 'title') ]
profile
Make my day !

0๊ฐœ์˜ ๋Œ“๊ธ€