모델
class Book(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
room = models.ForeignKey(Rooms, on_delete=models.CASCADE, related_name='bookset')
created_at = models.DateTimeField(auto_now_add=True)
members = models.IntegerField(default=1)
check_in = models.DateField()
check_out = models.DateField()
def __str__(self):
return self.user
user 와 room을 foreignkey로 받아온다.
그리고 self.user 부분 주석처리해줘야함
뷰
class BookManage(APIView):
def get(self, request, pk):
all_books = get_object_or_404(Book, id=pk)
serializer = BookSerializer(all_books)
return Response(serializer.data)
def post(self, request, pk):
room = get_object_or_404(Rooms, id=pk)
serializer = BookSerializer(data = request.data)
if serializer.is_valid():
if not room.bookset.filter(room=pk, check_in=request.data["check_in"]).exists():
serializer.save(user=request.user, room=room)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response('예약할 수 없음')
else:
return Response(serializer.errors)
def delete(self, request, pk):
book = get_object_or_404(Book, id=pk)
if request.user == book.user:
book.delete()
return Response("예약 취소됨", status=status.HTTP_204_NO_CONTENT)
else:
return Response("권한이 없음")
예약 객체를 생성하고 지우고, 조회할 수 있다.
(room.bookset 으로 room 객체에서 book 조회 역참조)
시리얼라이저
class BookSerializer(serializers.ModelSerializer):
def get_user(self, obj):
print(obj.user.email)
return obj.user.email
class Meta():
extra_kwargs = {"user": {"required":False}, "room": {"required":False}}
model = Book
fields = '__all__'
시리얼라이저에서 required를 False로 바꾼다.
'코딩 > Django' 카테고리의 다른 글
시리얼라이저에 대한 이해 (0) | 2023.05.17 |
---|---|
DRF를 이용한 팀프로젝트 진행 (0) | 2023.05.09 |
프로젝트 기획 (1) | 2023.05.08 |
시리얼라이저 복습 (0) | 2023.05.04 |
파일 입출력 (0) | 2023.05.03 |