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'
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='신데렐라'
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 )