2014-12-04 72 views
0
获取列表

考虑下面的Django代码如何从一个查询集在Django

phonenumbers = othermodel.objects.filter(company=mymodel.company, 
             date_overwritten__isnull=True 
             ).values_list('id', flat=True) 

这将返回另一个QuerySet对象,而不是一个Python列表,在返回的查询集的第一个对象是{valuesListQuerySet}这是一个空列表,这是正确的,因为我的整个模型/表othermodel目前是空的

我在想什么?我如何得到公正的{} valuesListQuerySet作为一个正常的Python列表,即使其空

+0

https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated – 2014-12-04 11:44:20

+0

为什么你需要它作为一个列表,具体是什么?如何编写惯用Python的一部分是依靠鸭子打字;查询集几乎支持列表的所有功能。有时你需要明确转换,但这当然不是问题。 – 2014-12-04 11:46:14

+0

我在另一个查询中使用结果newquery.message_set.exclude(originator = phonenumbers)然后会发生什么是newquery继承并追加phonenumbers查询,但是当我查看串联时,它有一个SELECT U0。“originator”now U0似乎是系统生成的,它把整个事情搞乱 – 2014-12-04 12:01:38

回答

2

由于django doc says

如果不传递任何值values_list(),它会返回所有的 字段在模型中,按照它们被声明的顺序。

请注意,此方法返回一个ValuesListQuerySet。这个类的行为像列表一样行为 。大多数时候这已经足够了,但是如果你需要一个实际的Python列表对象,你可以简单地调用它的list(),其中 将评估查询集。

所以,你可以拨打:

list(phonenumbers)