Django Rest Framework как мне получить id, который я использую в URL

У меня есть этот сериализатор, и я использую его для получения деталей поста, принадлежащего пользователю. Владельцем поста является не тот пользователь, который в данный момент вошел в систему. Я хочу проверить, добавил ли этот пост в закладки пользователь, вошедший в систему в данный момент. id текущего пользователя передается в запросе, но я не могу найти его в этом контексте.

Вот сериализатор:

class UserPostSerializer(serializers.ModelSerializer):
    images = PostImageSerializer(many=True, read_only=True, required=False)
    profile = serializers.SerializerMethodField()
    bookmarked = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = [
            "id",
            "category",
            "body",
            "images",
            "video",
            "profile",
            "published",
            "bookmarked",
            "created_at",
            "updated_at",
        ]
        depth=1
        
    def get_profile(self, obj):
        profile_obj = Profile.objects.get(id=obj.user.profile.id)
        profile = ShortProfileSerializer(profile_obj)
        return profile.data

    def get_bookmarked(self, obj):
        breakpoint()
        bookmark = Bookmark.objects.filter(owner=obj.user.id, post=obj.id,marktype='post')
        if bookmark:
            return True
        else:
            return False

Проблема в том, что obj.user.id является владельцем поста. Мне нужен залогиненный пользователь, чей id передается в url. Вот модель для закладки:

class Bookmark(models.Model):
    marktype = models.CharField(max_length=50)
    post = models.OneToOneField(Post, on_delete=models.CASCADE, null=True, blank=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="created at")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="updated at")

    class Meta:
        verbose_name = "bookmark"
        verbose_name_plural = "bookmarks"
        ordering = ["created_at"]
        db_table = "bookmarks"

    def __str__(self):
        return "{}'s bookmark".format(self.owner.username)

и вот URL:

path("posts/<int:user>/home/", HomeView.as_view(), name="home"),

Это self.context['request'].user возвращает владельца поста, а не вошедшего пользователя. Как мне получить id текущего вошедшего пользователя или пользователя, чей id я передаю в URL?

Можно ли использовать фильтры для Viewset:

urls.py

path("posts/home/", HomeView.as_view(), name="home")

viewsets.py

from rest_framework import viewsets

from .models import Post
from .serializers import, UserPostSerializer
from .filters import OwnerFilter


class HomeView(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = UserPostSerializer
    filter_backends = (OwnerFilter,)

filters.py

from rest_framework.filters import BaseFilterBackend

class OwnerFilter(BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        owner = request.query_params.get('owner', None)

        if not owner:
            return queryset.all()
        else:
            try:
                return queryset.filter(bookmarked__owner__id=owner)
            except Exception:
                return queryset.none()

Выполняется

Затем откройте URL: /posts/home/?owner=OWNER_ID_HERE

Решил эту проблему, и вы можете получать любые kwargs из представления, которое обрабатывает запрос. В моем случае добавление следующего в функцию get_bookmarked дает мне id, который я отправляю в URL:

loggeduser = self.context.get('view').kwargs.get('user')
Вернуться на верх