TypeError: Поле 'id' ожидало число, но получило <django.db.models.fields.related_descriptors

У меня есть простое представление для показа всех текущих пользователей, которые условно фильтруются на основе типа пользователя, запрашивающего данные.

serializers.py

  class MyAccountSerializer(serializers.ModelSerializer):
        image = serializers.ImageField()
    
        class Meta:
            model = User
            fields = ['id', 'sex', 'type', 'phone', 'image', 'email', 'student_id', 'firstname', 'middlename', 'lastname',
                      'image', 'joined_date', 'is_active', 'is_superuser', 'is_staff', 'last_login']

views.py

class TeacherList(generics.ListAPIView):
permission_classes = [IsAuthenticated, ]
serializer_class = ListUsersSerializer
queryset = User.objects.filter(type=User.TYPES.TEACHER)

Простой фильтр, подобный этому, работает без ошибок, но поскольку мне нужно фильтровать ответ на основе запрашивающего пользователя

вот что я хочу использовать

class TeacherList(generics.ListAPIView):
    permission_classes = [IsAuthenticated, ]
    serializer_class = ListUsersSerializer
    # queryset = User.objects.filter(type=User.TYPES.TEACHER)

    def get_queryset(self):
        request = self.request.user
        if request.type == User.TYPES.OWNER:
            queryset = User.objects.filter(
                type=User.TYPES.TEACHER, workes=request.owns)
        elif request.type in [User.TYPES.STAFF, User.TYPES.DIRECTOR, User.TYPES.VICE_DIR]:
            queryset = User.objects.filter(
                type=User.TYPES.TEACHER, workes=request.workes)
        return queryset

однако это показывает мне ошибку, которая выглядит следующим образом:

Field 'id' expected a number but got <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x0000019D64AE7D60>.

Я подозреваю, что это как-то связано с полем "многие ко многим", из которых у меня есть одно с именем owns, которое я использую для фильтрации в 1 из условий, но не знаю, почему оно выдает ошибку

Я думаю, что вместо

queryset = User.objects.filter(
            type=User.TYPES.TEACHER, workes=request.owns)

Вы должны попробовать что-то вроде:

queryset = User.objects.filter(
            type=User.TYPES.TEACHER, workes__in=request.owns.all())

или

queryset = User.objects.filter(
            type=User.TYPES.TEACHER, workes__in=request.owns.values_list("id", flat=True))

Он должен соответствовать всем пользователям, которые имеют все идентификаторы из request.owns ids.

Вернуться на верх