Django/Python使用'=';结果

Django/Python使用'=';结果,django,python-3.x,unit-testing,Django,Python 3.x,Unit Testing,我正在编写test\u模板,这样我就可以非常快速地编写测试,因为我意识到我在用不同的变量复制相同的代码。但我遇到了一个问题: # 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': '

我正在编写
test\u模板
,这样我就可以非常快速地编写测试,因为我意识到我在用不同的变量复制相同的代码。但我遇到了一个问题:

# 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()
,直到我很快发现它不喜欢
=
。我尝试为
'first\u name=“first”
使用两个不同的变量,但模型永远无法从
变量='field\u name'
中找到字段


这些模板通过向多个视图添加少量信息来帮助我测试多个视图,并且由于模板中的多个测试需要检索模型的实例,因此我尝试在顶部设置一个变量,该变量将运行所有相关测试

您可以改用字典:

model_criteria = {'first_name': "First"}
当您使用
**
将其作为
filter()
参数传递时,只需将其解压缩即可:

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