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)
也一样。 但在我的情况下列是一个外键,这个查询失去了一个外键的属性。 这只是存储的价值。 我无法查找电话。
当然, values
和value_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)
这种方法唯一的问题是,如果你的查询集很大,你的内存使用将会相当大。
无论如何,我仍然不确定这个问题的具体情况。