Как сделать фиктивный объект итеративным ['TypeError:' фиктивный 'объект не итерируемый'] Необходимо выполнить макет запроса django, который повторяется в цикле for - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь смоделировать следующий объект запроса django:

1.) if MyModel.objects.filter(data='some_data').exists():
then 2.) for row in MyModel.objects.filter(ListId=id):

Я пытаюсь протестировать ниже запрос django внутри моего метода.

def my_method(some_parameter):
 if formsList.objects.filter(data=some_data).exists():
    for item in formsList.objects.filter(data1='data1',data2='data2'):
        formNameInDb = (item.fileId).formName
        if formNameInDb == formName:
            return True

Ниже мой подход:

@mock.patch('MyModel.objects')  
def test_checkCombinationOfStateAndProduct(self, formsList_mock):

    formsList_mock_data = mock.MagicMock(spec=MyModel)
    formsList_mock_data.fileId.formName ='test data'

    formsList_queryset = Mock()
    formsList_mock.filter.return_value = formsList_queryset

    # formsList_mock.filter.return_value = [formsList_queryset] 

    formsList_queryset.exists.return_value = True

Для запроса 1).Он работает так, как будто я могу смоделировать , если formsList.objects.filter (data = some_data) .exists ()

, но опять же для запроса 2) для элемента в formsList.objects.фильтр (data1 = 'data1', data2 = 'data2'): я получаю фиктивный объект (formsList_queryset) должен быть итеративным , поэтому, если я сделаю его итерируемым, как это [formsList_queryset] .

Затем я получаю сообщение об ошибке "AttributeError: у объекта 'list' нет атрибута 'Существует' .

Я думаю, это потому, что после того, как сделать фиктивный объект итеративным, этоведет себя как список, поэтому он не имеет атрибут существующего.

Моя проблема в том, что я не могу сделать фиктивный объект (formsList_queryset) повторяемым, чтобы он работал в обоих вышеупомянутых запросах.

Есть ли другой способ макетировать оба запроса для решения этой проблемы.

Может ли кто-нибудь помочь решить цепные запросы. Любая помощь или руководство, я буду очень признателен. Пожалуйста, дайте мне знать, если требуется какая-либо информация.

...