【问题标题】:Django/Python convert string to Model filter with '=' in resultDjango / Python将字符串转换为模型过滤器,结果为'='
【发布时间】:2018-05-22 02:08:19
【问题描述】:

我正在编写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(),直到我很快发现它不喜欢=。我尝试为'first_name="First"' 使用2 个不同的变量,但模型永远不会从variable='field_name' 中找到字段。

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

【问题讨论】:

    标签: django python-3.x unit-testing


    【解决方案1】:

    您可以改用字典:

    model_criteria = {'first_name': "First"}
    

    当您使用** 将其作为filter() 参数传递时,只需解压即可:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多