Получение 404 not found при попытке обновить данные с помощью запроса в Django

Я пытаюсь добавить status в одно из полей таблицы DB, где сначала я проверяю, присутствует ли переданное ID в таблице, если да, то добавляю.

ID в основном происходит из переменной пути API, которую я получаю и передаю в запрос. Ниже приведен API, который я использую для вызова класса view.

 "/notify/<int:pk>/mark_as_seen/"

 "/notify/1/mark_as_seen/" # where 1 is the record Id in the DB table

Ниже представлен код, который запрашивает таблицу DB и проверяет, доступен ли переданный Id.

class MarkAsSeenView(BaseAuthenticationMixin, generics.RetrieveAPIView):
permission_classes = [permissions.IsAuthenticated]
serializer_class = SeenSerializer
queryset = Seen.objects.all()

def filter_queryset(self, queryset):
    qs = super().filter_queryset(queryset=queryset)
    qs = qs.exclude(seen_by_user=self.request.user).exclude(user=self.request.user)
    return qs

def retrieve(self, request, *args, **kwargs):
    obj = self.get_object()
    obj.seen_by_user.add(self.request.user)
    return super().get(request, *args, **kwargs)

Теперь, когда я вызываю этот View через вышеупомянутый API, он прекрасно работает в первую очередь, где он добавляет одну запись в таблицу, как видно, с идентификатором пользователя. Теперь проблема в том, что после выполнения всех ожидаемых действий он снова переходит к методу filter_queryset и пытается снова искать тот же ID, который уже был исключен в предыдущей итерации, из-за чего он не получил ту же ID, скажем 1 запись в таблице, в результате чего 404 не найден как response.

Я не понимаю, почему он снова возвращается для поиска того же самого от retrieve к filter_queryset. Может ли кто-нибудь указать, в чем именно здесь проблема, потому что я отладил весь вид, но не понимаю, почему он прыгает туда-сюда.

Любая помощь будет очень признательна. Заранее спасибо.

Я думаю, что эта строка может быть проблемой и может перезапустить фильтр queryset из-за вызова конечной точки get с самого начала

return super().get(request, *args, **kwargs)

Можете попробовать следующее?

def retrieve(self, request, *args, **kwargs):
    obj = self.get_object()
    obj.seen_by_user.add(self.request.user)
    serializer = self.get_serializer(obj)
    return Response(serializer.data)
Вернуться на верх