如何在Django中声明已经从数据库中填充了模型字段?

时间:2014-01-13 13:07:35

标签: python django django-models

在Django中,是否有一种简单的方法可以测试对象的模型字段是否已经从数据库中查询过(例如来自外键关系的对象)?

我想在我的一个测试中做出这样的断言,以确保访问其中一个对象的特定属性不会触发额外的数据库查询。

2 个答案:

答案 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)