Инсценировка запроса к цепочке БД в модульном тесте Django

У меня есть функция, которая позволяет пользователям создавать новую запись в БД. Но перед этим у меня была проверка, не являются ли существующие записи пользователя меньше допустимого диапазона. Ниже приведена реализация функции

def is_allowed_to_create(permissible_range):
    count = MyModel.objects.filter(query)[:permissible_range].count()
    return not count >= permissible_range

Внутри тестового файла я делаю


    @mock.patch('MyApp.models.MyModel.objects')
    def test_is_allowed_to_create(self, mock_qs, *args, **kwargs):
        mock_qs.filter.return_value = mock_qs
        mock_qs.count.return_value = 10
        self.assertTrue(is_allowed_to_create(5))

И ошибка, которую я получаю, следующая TypeError: '>=' not supported between instances of 'MagicMock' and 'int'.

Как я понял из ошибки, мой код не устанавливает правильное возвращаемое значение для всего запроса DB, т.е. MyModel.objects.filter(query)[:permissible_range].count(). Как я могу установить издевательское значение для MyModel.objects.filter(query)[:permissible_range].count() как целое число. Спасибо!

Я внес изменения в свою тестовую функцию, так как я использую slicing, которая внутренне вызывает метод __getitems__, поэтому мне нужно поиздеваться и над ним

Вот обновленный код

    @mock.patch('MyApp.models.MyModel.objects')
    def test_is_allowed_to_create(self, mock_qs, *args, **kwargs):
        mock_qs.filter.return_value = mock_qs
        mock_qs.__getitems__.return_value = mock_qs
        mock_qs.count.return_value = 10
        self.assertTrue(is_allowed_to_create(5))
Вернуться на верх