Model.objects.only(“columnname”)不起作用。它向我展示了一切

时间:2014-04-11 22:06:02

标签: python django model

我有一个名为Theme的模型。它有很多列,但我只需要检索名为" name"的字段,所以我这样做了:

Theme.objects.only("名称&#34)

但它不起作用,它仍在检索所有列。

PD:我不想使用values(),因为它只返回一个python字典。我需要返回一组模型实例,以访问其属性和方法。

2 个答案:

答案 0 :(得分:1)

使用only或其对应的defer并不会阻止访问延迟属性。它只会延迟检索所述属性,直到它们被访问为止。所以请注意以下几点:

for theme in Theme.objects.all():
    print theme.name
    print theme.other_attribute

这将在循环开始时执行单个查询。现在考虑以下内容:

for theme in Theme.objects.only('name'):
    print theme.name
    print theme.other_attribute

在这种情况下,other_attribute未在循环开始时的初始查询中加载。但是,它会添加到模型的延迟属性列表中。当您尝试访问它时,将执行另一个查询以检索other_attribute的值。在第二种情况下,对n Theme个对象执行总共n + 1个查询。

onlydefer方法只应在高级用例中使用,在出现优化需求后,并在正确分析代码后使用。即使这样,通常有一些解决方法比推迟字段更好。请阅读defer documentation底部的说明。

答案 1 :(得分:0)

如果您想要的是一个列,我认为您要找的是.values()而不是.only