[django] CRUD2 #1

ㅎㅎ·2021년 6월 22일
1

django

목록 보기
6/8

📌 django - CRUD2 #1 주인과 강아지

  • 먼저 위의 모델링을 토대로 models.py 만들기
from django.db import models
from django.db.models.deletion import CASCADE



class Owners(models.Model):
    name  = models.CharField(max_length=45)
    email = models.CharField(max_length=300)
    age =  models.IntegerField(default = 0)

    class Meta:
        db_table =  'owners' # 테이블 이름




class Dogs(models.Model):
    name = models.CharField(max_length=45)
    age = models.IntegerField(default = 0)
    owner =  models.ForeignKey('Owners', on_delete=models.CASCADE) #owner_id

    class Meta:
        db_table =  'dogs'

- Post 구현하기

1. 신규 주인 등록

from django.shortcuts import render

import json

from django.http     import JsonResponse
from django.views    import View
from owners.models import Owners, Dogs


class OwnersView(View): # 장고의 view를 상속받아 사용  
    # post - 생성할때 주로 사용
    def post(self,request): # 신규 주인 등록
        data = json.loads(request.body) # 들어온 body를 data로 저장

        owner = Owners.objects.create(
            name= data['name'],  # name='크루엘라'가 들어오면 크루엘라가 name이 된다. 즉 'name'과 들어오는 키값이 같아야함
            email = data['email'],
            age = data['age'],
        )
        return JsonResponse({'MESSAGE':'SUCCESS'} , status = 201)
        # http -v POST 127.0.0.1:8000/owners/owners name='크루엘라' email='c@gmail.com' age=23 -

- post로 데이터 넣기

http -v POST 127.0.0.1:8000/owners/owners name='크루엘라' email='c@gmail.com' age=23

2. 강아지 등록

class DogsView(View): # 장고의 view를 상속받아 사용  
    # post
    def post(self,request): # 강아지 등록
        data = json.loads(request.body)
        owner = Owners.objects.get(name=data['owner']) # 밑의 owner= owner를 위해 따로 빼줌  , owner='홍길동'이라면 value값 홍길동, get(id=data['id']) 
        
        dog = Dogs.objects.create(
            name= data['name'], 
            age = data['age'],
            owner = owner # 이 부분 , foreign key
            )
        return JsonResponse({'MESSAGE':'SUCCESS'} , status = 201)

- post로 데이터 넣기

http -v POST 127.0.0.1:8000/owners/dogs name='양파링' age=30 owner='신데렐라'

- Get 구현하기

1. 주인 리스트 (이름 ,이메일, 나이 + 강아지 리스트)

 
    # get
    def get(self,request): # 주인 리스트 
        owners = Owners.objects.all() #저장된데이터베이스에서 객체를 다 가지고 와서
        results = []
        for owner in owners: #하나씩 돌면서 results에 추가
            dogs = owner.dogs_set.all() #역참조하기 : 테이블명소문자_set
            dog_list = []

            for dog in dogs:
                dog_info = { 
                        'name' : dog.name,
                        'age' : dog.age
                    }

                dog_list.append(dog_info) 
            results.append(
                {
                    "name" : owner.name, # 외래키로 다 연결되어있음
                    "email" : owner.email,
                    "age" :  owner.age,
                    'dog' : dog_list
                }
            )
        return JsonResponse({'results': results },status=200 )

        # http -v GET 127.0.0.1:8000/owners/owners
  • 출력형태

2. 강아지 리스트 (이름,나이, 주인 이름)

    # get
    def get(self,request): # 강아지 리스트
        dogs = Dogs.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 )
  • 출력형태

0개의 댓글