Проблема с фильтрацией данных с помощью пользовательской функции в Python (Django)

Я хочу получить 4 случайных объекта из Product Я пытаюсь отфильтровать их функцией check_existing_id и random.randint и использую цикл while для получения 4 объектов из базы данных. Однако этот кусок кода в некоторых случаях возвращает только 3 объекта. В коде скрыта ошибка, и я понятия не имею, где мне нужно, чтобы он каждый раз возвращал именно 4 элемента. Я вставляю код ниже, это просто простая функция:

def check_existing_id(list,number):
        for i in range(len(list)):
            if list[i] == number:
                return False
        return True

class GetRecommendedProducts(generics.ListAPIView):
    serializer_class = ProductSerializer
    
    def get_queryset(self):
        product_id = self.kwargs['product_id']
        products_length = len(Product.objects.all())
        id_list = []
        while len(id_list) < 4:
            id = random.randint(0, products_length)
            if check_existing_id(id_list, id) and id != product_id:
                id_list.append(id)

        return Product.objects.filter(id__in=id_list)

Вы можете воспользоваться функцией sample(…) [Python-doc] пакета random [Python-doc]. Вы можете сначала получить список первичных ключей (исключая product_id), затем сделать выборку четырех элементов, а затем получить Products:

from random import sample

class GetRecommendedProducts(generics.ListAPIView):
    serializer_class = ProductSerializer
    
    def get_queryset(self):
        id_list = list(Product.objects.exclude(
            id=self.kwargs['product_id']
        ).values_list('id', flat=True))
        return Product.objects.filter(id__in=sample(id_list, 4))
Вернуться на верх