Django 소유자 여부 확인(DRF)
Room 모델이 있고, 각 방은 owner가 있습니다.
방 정보를 조회하는 API를 만들려고 하는데, 로그인한 사용자가 각 방의 owner인지 여부를 확인하려고 합니다.
models.py
from django.db import models
from django.contrib.auth.models import User
class Room(models.Model):
name = models.CharField(max_length=100)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
serializers.py
from rest_framewok import serializers
from .models import Room
class RoomSerializer(serializers.ModelSerializer):
is_owner = serializers.SerializerMethodField()
def get_is_owner(self, room):
request = self.context["request"]
return room.owner == request.user
class Meta:
model = Room
fields = ["id", "name", "is_owner"]
views.py
from rest_framework import generics
from .models import Room
from .serializers import RoomSerializer
class RoomList(generics.ListAPIView):
queryset = Room.objects.all()
serializer_class = RoomSerializer
위 코드에서 Room 모델과 그에 맞는 시리얼라이저, APIView를 정의했습니다.
이때 is_owwner
필드는 RoomSerializer
클래스에 추가된 SerializerMethodField
로, 방의 소유자 여부를 나타냅니다.get_is_owner
메서드에서는 self.context
를 통해 현재 요청의 정보에 접근하고, 이를 활용하여 방의 소유자와 현재 사용자를 비교하여 is_owner
값을 결정하고 있습니다.
이렇게 context
를 활용하여 요청 정보를 활용하는 것은 API의 동작을 더욱 유연하게 커스터마이징하고 필요한 정보를 포함시킬 수 있습니다.
'Python > Django' 카테고리의 다른 글
Django의 사용자 인증 및 관리를 위한 유틸리티 함수 (1) | 2023.11.26 |
---|---|
DRF) serializer에서 validation 메소드 만들기 (0) | 2023.10.01 |
Serializer에서 method 사용하기 (0) | 2023.08.27 |
Django에서의 Transactions (0) | 2023.08.26 |
values_list() (0) | 2023.08.09 |