Anu*_*nuj 44 django django-models
我想知道有没有相当于:
select columnname from tablename
Run Code Online (Sandbox Code Playgroud)
像Django教程说:
Entry.objects.filter(condition)
Run Code Online (Sandbox Code Playgroud)
获取具有给定条件的所有对象.它像是:
select * from Entry where condition
Run Code Online (Sandbox Code Playgroud)
但是我想列出一个列[在我的例子中是一个外键].发现:
Entry.objects.values_list('column_name', flat=True).filter(condition)
Run Code Online (Sandbox Code Playgroud)
做同样的事.但在我的情况下,该列是外键,并且此查询丢失了外键的属性.它只是存储值.我无法进行查询.
roa*_*oam 61
当然,values并将values_list从数据库中检索原始值.Django无法在模型上运行它的"魔力",这意味着你不能遍历关系,因为你被外键指向的id所困,而不是ForeignKey字段.
如果需要过滤这些值,可以执行以下操作(假设column_name是指向的ForeignKey MyModel):
ids = Entry.objects.values_list('column_name', flat=True).filter(...)
my_models = MyModel.objects.filter(pk__in=set(ids))
Run Code Online (Sandbox Code Playgroud)
这是一个文档 values_list()
您有一个A带有外键的模型到另一个模型B,并且您想要选择B某些人引用的s A.是对的吗?如果是这样,您想要的查询只是:
B.objects.filter(a__isnull = False)
Run Code Online (Sandbox Code Playgroud)
如果你有相应的条件A,那么查询可以是:
B.objects.filter(a__field1 = value1, a__field2 = value2, ...)
Run Code Online (Sandbox Code Playgroud)
有关其原理的解释,请参阅Django的向后关系文档,如果要更改向后关系的名称,请参阅该ForeignKey.related_name选项.
要将查询集限制为您使用的特定列.values(columname)
您还应该在末尾添加distinct,因此您的查询将以:
Entry.objects.filter(myfilter).values(columname).distinct()
Run Code Online (Sandbox Code Playgroud)
请参阅:https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values
欲获得更多信息
根据您在评论中的答案,我会回来编辑.
编辑:
我不确定这种方法是否合适.您可以通过过滤器获取正常的查询集,然后执行以下操作来获取python列表中的所有对象:
myobjectlist = map(lambda x: x.mycolumnname, myqueryset)
Run Code Online (Sandbox Code Playgroud)
这种方法的唯一问题是如果你的查询集很大,你的内存使用量将同样大.
无论如何,我仍然不确定问题的某些细节.
| 归档时间: |
|
| 查看次数: |
54153 次 |
| 最近记录: |