Я пытаюсь смоделировать следующий объект запроса 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) повторяемым, чтобы он работал в обоих вышеупомянутых запросах.
Есть ли другой способ макетировать оба запроса для решения этой проблемы.
Может ли кто-нибудь помочь решить цепные запросы. Любая помощь или руководство, я буду очень признателен. Пожалуйста, дайте мне знать, если требуется какая-либо информация.