我想在不影响数据库的情况下测试窗体。表单使用ModelChoiceField引用模型,ModelChoiceField在form.is_valid()
期间运行查询,该查询尝试从数据库中获取引用的对象。这发生在related_object_field.to_python()
中,它试图从默认管理器的QuerySet中获取对象。你知道吗
我试着修补我模型的queryset.get()
,但没有效果:
@patch('myapp.models.MyModel._default_manager.get_queryset')
def test_form(mocked_get_queryset):
assert mocked_get_queryset.called # <-- this assertion fails
[...]
form = MyForm(data=my_data)
assert form.is_valid()
这是回溯的一个片段,它显示了为什么数据库被击中,以及我想嘲弄的内容:
form.is_valid()
django/forms/forms.py:179: in is_valid
return self.is_bound and not self.errors
django/forms/forms.py:174: in errors
self.full_clean()
django/forms/forms.py:376: in full_clean
self._clean_fields()
django/forms/forms.py:394: in _clean_fields
value = field.clean(value)
django/forms/fields.py:148: in clean
value = self.to_python(value)
django/forms/models.py:1245: in to_python
value = self.queryset.get(**{key: value})
[...]
E Failed: Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.
我想我没有找到合适的地方。你能给我一些关于如何模拟数据库调用的提示吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐