在Django中,是否有一种简单的方法可以测试对象的模型字段是否已经从数据库中查询过(例如来自外键关系的对象)?
我想在我的一个测试中做出这样的断言,以确保访问其中一个对象的特定属性不会触发额外的数据库查询。
答案 0 :(得分:6)
在ForeignKey的特定情况下,您可以检查是否存在_FOO_cache
属性。例如,如果您的Employee对象具有ForeignKey to Company,那么如果填充my_employee.company
,则my_employee._company_cache
将存在,因此您可以执行hasattr(my_employee, '_company_cache')
。
答案 1 :(得分:4)
您可以使用TestCase.assertNumQueries。
要检查obj.accessor
是否未点击数据库:
# context manager version
with self.assertNumQueries(0):
obj.accessor
# function version
self.assertNumQueries(0, lambda: obj.accessor)