Django / Python преобразует строку в фильтр модели с '=' в результате - PullRequest
0 голосов
/ 22 мая 2018

Я работаю над написанием test_templates, чтобы я мог очень быстро написать свои тесты, так как я понял, что дублирую один и тот же код с разными переменными.Но я столкнулся с проблемой:

# path of view
# '/app/view/path/'
view_name = 'service:create_employee_profile'

# valid field values to test form success.
valid_values = {
    'first_name': 'First',
    'last_name': 'Last',
}

# Search criteria for Model 'get' and 'filter'
# Model.objects.get(field=value)
# Model.objects.get(eval(model_criteria))
model_criteria = 'first_name="First"'

"""
TESTS: Submitting forms
"""
# TEST: View saves valid object.
def test_view_saves_valid_object(self):
    response = self.client.post(
        reverse(view_name), valid_values)

    self.assertTrue(Model.objects.filter(eval(model_criteria)).exists())

Я думал, что мне установили eval(), пока я быстро не обнаружил, что ему не нравится =.Я попытался использовать 2 разные переменные для 'first_name="First"', но Модель никогда не найдет поле из variable='field_name'.

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

1 Ответ

0 голосов
/ 22 мая 2018

Вместо этого вы можете использовать словарь:

model_criteria = {'first_name': "First"}

Просто распакуйте его, когда передаете его как аргумент filter(), используя **:

self.assertTrue(Model.objects.filter(**model_criteria).exists())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...