Competency Assessment Level One
level이 끝날 때, test 같은 것이 있는데, level three 넘어가기 전에 복습 겸 정리하고 넘어가자!
#models.py
class JobOffer(models.Model):
company_name = models.CharField(max_length=60)
company_email = models.EmailField()
job_title = models.CharField(max_length=60)
job_description = models.TextField(max_length=200)
salary = models.PositiveIntegerField()
city = models.CharField(max_length=60)
state = models.CharField(max_length=60)
created_at = models.DateTimeField(auto_now_add=True)
available = models.BooleanField(default=True)
def __str__(self):
return self.company_name
#serializers.py
from rest_framework import serializers
from jobboard.models import JobOffer
class JobOfferSerializer(serializers.ModelSerializer):
class Meta:
model = JobOffer
fields = "__all__"
#views.py
from django.shortcuts import get_object_or_404
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from jobboard.models import JobOffer
from jobboard.api.serializers import JobOfferSerializer
class JobBoardListCreateAPIView(APIView):
def get(self, request):
job = JobOffer.objects.filter(available = True)
serializer = JobOfferSerializer(job, many=True)
return Response(serializer.data)
def post(self, request):
serializer = JobOfferSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class JobBoardDetailAPIView(APIView):
def get_object(self, pk):
joboffer = get_object_or_404(JobOffer, pk=pk)
return joboffer
def get(self, request, pk):
job = self.get_object(pk)
serializer = JobOfferSerializer(job)
return Response(serializer.data)
def put(self, request, pk):
job = self.get_object(pk)
serializer = JobOfferSerializer(job, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
job = self.get_object(pk)
job.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
코드는 강의와 거의 같고,
코드 보다도 계속 눈에 밟혔던
get_object
디버깅
>>>joboffer
<JobOffer: JOH>
>>>self
<jobboard.api.views.JobBoardDetailAPIView object at 0x7f9fd18ec4c0>
>>>self.get_object
<bound method JobBoardDetailAPIView.get_object of <jobboard.api.views.JobBoardDetailAPIView object at 0x7f9fd18ec4c0>>
>>>self.get_object(1)
<JobOffer: JOH>
>>>job
<JobOffer: JOH>
>>>serializer
JobOfferSerializer(<JobOffer: JOH>):
id = IntegerField(label='ID', read_only=True)
company_name = CharField(max_length=60)
company_email = EmailField(max_length=254)
job_title = CharField(max_length=60)
job_description = CharField(max_length=200, style={'base_template': 'textarea.html'})
salary = IntegerField()
city = CharField(max_length=60)
state = CharField(max_length=60)
created_at = DateTimeField(read_only=True)
available = BooleanField(required=False)
>>>serializer.data
{'id': 1, 'company_name': 'JOH', 'company_email': 'info@johcompany.com', 'job_title': 'Manager', 'job_description': 'Hello', 'salary': 60000, 'city': 'seoul', 'state': 'seoul', 'created_at': '2022-02-07T11:58:28.356698Z', 'available': True}
get_object()
method로 pk가 1인 JobOffer 인스턴스 리턴
self
는 JobBoardDetailAPIView object
self.get_object(1)
를 통해 pk가 1인 JobOffer 인스턴스를 job 변수에 담아 serializer에 태운다!
get_object_or_404