Django:相当于“从中select”

我想知道有什么相当于:

select columnname from tablename 

就像Django教程所说:

 Entry.objects.filter(condition) 

获取具有给定条件的所有对象。 它像是:

 select * from Entry where condition 

但是我想列出一列(在我的情况下是一个外键)。 发现:

 Entry.objects.values_list('column_name', flat=True).filter(condition) 

也一样。 但在我的情况下列是一个外键,这个查询失去了一个外键的属性。 这只是存储的价值。 我无法查找电话。

当然, valuesvalue_list将从数据库中检索原始值。 Django不能在模型上使用它的“魔法”,这意味着你不能遍历关系,因为你被外键指向的id所困,而不是ForeignKey字段。

如果您需要过滤这些值,您可以执行以下操作(假设column_name是一个指向MyModel的ForeignKey):

 ids = Entry.objects.values_list('column_name', flat=True).filter(...) my_models = MyModel.objects.filter(pk__in=set(ids)) 

这是一个values_list()的文档

你有一个模型A和另一个模型B的外键,你想select一些A引用的B 是对的吗? 如果是这样,你想要的查询只是:

 B.objects.filter(a__isnull = False) 

如果您对相应的A有条件,则查询可以是:

 B.objects.filter(a__field1 = value1, a__field2 = value2, ...) 

请参阅Django的向后关系文档以获得解释原因的说明,以及如果要更改向后关系的名称,请参见ForeignKey.related_name选项 。

要将查询设置为特定的列,请使用.values(columname)

你也应该添加截然不同的结束,所以你的查询将结束:

 Entry.objects.filter(myfilter).values(columname).distinct() 

请参阅: https : //docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values

了解更多信息

根据你在评论中的回答,我会回来编辑。

编辑:

我不确定这种方法是否正确。 你可以通过filter获得一个正常的查询集,然后执行以下操作来获取所有的对象:

 myobjectlist = map(lambda x: x.mycolumnname, myqueryset) 

这种方法唯一的问题是,如果你的查询集很大,你的内存使用将会相当大。

无论如何,我仍然不确定这个问题的具体情况。