C.R.U.D 2에서는 R에 대해서 다루었고 post를 이용해 body를 만들고 get으로 정보를 가져오는 수업을 진행했습니다.
post
각 기능을 서로 다른 클래스로 구현해주세요.
1. 신규 주인 등록
2. 강아지 등록(주인정보 필요)
Get
1. 주인 리스트(이름, 이메일, 나이 포함)
2. 강아지 리스트(이름, 나이, 주인 이름 포함)
3. 주인 리스트(1번 코드에 추가, 이름, 나이 포함, 키우는 강아지 리스트(이름 ,나이))
models.py
class Owner(models.Model):
name = models.CharField(Max_lengh=45)
email = models.CharField(Max_lengh=300)
age = models.IntegerField()
class Meta:
db_table = 'owners'
class Dog(models.Model):
owners = models.Foreignkey(Owner, on_delet=models.CASCADE)
name = models.CharField(Max_lengh=45)
age = models.IntegerField()
class Meta:
db_table = 'dogs'
models.py 해석
1. 각각의 owners, dogs에 맞는 class를 만들어주었습니다.
views.py에서 get, post를 지정해주어야 합니다.
views.py
class OwnerListView(View):
def get(self, request):
owners = Owner.objects.all()
result1 = []
for owner in owners:
dogs = owner.dog_set.all()
result10 = []
for dog in dogs:
list1 = {'dog_name': dog.name, "dog_age": dog.age}
result10.append(list1)
result3 = {'name': owner.name},{'email': owner.email}, {'age': owner.age}, {'dogs':result10}
result1.append(result3)
return JsonResponse({'result': result1}, status=200)
def post(self, request):
try:
data = json.loads(request.body)
Owner.objects.create(name=data['name'], email=data['email'], age=data['age'])
return JsonResponse({'result': 'SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'message' : 'INVELID_KEY'}, status=400)
class DogListView(View):
def get(Self, request):
dogs = Dog.objects.all()
result2 = []
for dog in dogs:
owners = Owner.objects.get(name=dog.owners.name)
result4 = {'name' : dog.name}, {'age': dog.age}, {'owner': owners.name}
result2.append(result4)
return JsonResponse({'result': result2}, status=200)
def post(self, request):
try:
data = json.loads(request.body)
owner = Owner.objects.get(name=data['owner']) # name=data['front key 값 아무 내용 가능']
Dog.objects.create(name=data['name'], age=data['age'], owners=owner)
return JsonResponse({'result': 'SUCCESS'}, status=201)
except KeyError:
return JsonResponse({'message' : 'INVELID_KEY'}, status=400)
except Owner.DoesNotExist:
return JsonResponse({'message' : 'USER DOES NOT EXIST'}, status=404) # get 들어있다면 except 2개 해줘야한다.
설명
1. 첫번째 클래스 지정한 후 post를 만들어서 값을 넣어주었습니다.
Owner.objects.create(name=data['name'], email=data['email'], age=data['age']
를 작성해주며 직접 값을 넣어줄수있게 해주었습니다.owner = Owner.objects.get(name=data['owner'])
를 적어 주며 포린키를 적어주었습니다.새롭게 배운거나 추가 내용
dosg = owener.dog_set.all()
이처럼 _set을 이용해서 역참조 한다는점을 알게 되었습니다.