Jam*_*s M 13 django django-queryset
假设我有一个像Bill这样的事情的查询集:
test=Things.objects.filter(user='Bill')
Run Code Online (Sandbox Code Playgroud)
现在我想按照分配给账单的日期对所有这些事情进行排序.不幸的是,赋值日期不是Thing模型中的字段.相反,有一个名为thing_date()的方法可以计算出来并返回日期.例如,以下内容:
Thingobject.thing_date()
Run Code Online (Sandbox Code Playgroud)
...返回日期.我想我想做的是:
test=Things.objects.filter(user='Bill').order_by(self__thing_date())
Run Code Online (Sandbox Code Playgroud)
......但我知道那是行不通的.还有另外一种方法吗?
毫不奇怪,其他人以前一直沿着这条路走下去.链接
Leo*_*opd 21
如果thing_date()是python代码中的函数,则无法让数据库对其进行排序.这意味着放置查询集没有意义.在将结果导入python之后,您必须对结果进行排序.只要你没有处理大量的物体,这就没问题了.
qs = Things.objects.filter(user='Bill')
unsorted_results = qs.all()
sorted_results = sorted(unsorted_results, key= lambda t: t.thing_date())
Run Code Online (Sandbox Code Playgroud)
如果你有非常多的Things那么你将不得不想办法thing_date进入数据库,否则你将有内存问题.
Mar*_*ski 10
看到这些答案使用计算值来排序QuerySet:
基本上,如果thing_date()可以使用查询表达式确定,则可以使用它来注释和搜索查询集.
from django.db.models import F
from django.utils import timezone
test = Things.objects.filter(user='Bill').annotate(
thing_date=(F('<date field>') - timezone.now()) # some computation
).order_by('thing_date')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10276 次 |
| 最近记录: |