作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用的是 Django 1.4。我们有一个 A
类,它有一个与之相关的 History
类。 A
的任何单个对象都可以有多个 History 对象。
History
类具有到其他类的外键,例如 BusinessUnit
。
我想按 last 历史对象对 A
的对象进行排序(如果有的话)(按 History.logged_at
排序)。
我尝试使用 order_by('history__business_unit')
,但它无法正常工作。是否可以使用数据库进行这样的排序,还是我们必须使用 Python 进行排序?如果可能,我更喜欢使用数据库进行排序。
最佳答案
您必须注释最大相关日期,过滤最大日期等于历史日期的历史对象,并按 business_unit
属性排序。 :
from django.db.models import Max, F
a = A.objects.annotate(last_date=Max('history_set__logged_at'))\
.filter(history_set__logged_at=F('last_date'))\
.order_by('history_set__business_unit__<attribute>')
这样,对于每个 A
对象,您可以筛选出最后一个 History
相关对象,并根据关联的 business_unit
进行排序。仅使用 history_set__business_unit
将按业务单位的 ID 排序,因此对于任何有意义的排序,您需要决定要排序的 business_unit
属性。
关于python - 如何在 Django 中订购反向外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22744019/
我是一名优秀的程序员,十分优秀!