Django 소유자 여부 확인(DRF)

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의 동작을 더욱 유연하게 커스터마이징하고 필요한 정보를 포함시킬 수 있습니다.