【发布时间】:2012-10-30 11:19:43
【问题描述】:
这是我的模型的一个子集:
class Case(models.Model):
... # primary key is named "id"
class Employee(models.Model):
... # primary key is named "id"
class Report(models.Model):
case = ForeignKey(Case, null=True)
employee = ForeignKey(Employee)
date = DateField()
给定一个特定的员工,我想生成一份所有案例的列表,按员工最近报告的时间排序。那些没有报告的案例应该排在最后。同一日期的案例(包括 NULL)应按更多标准排序。
我可以在 Django ORM api 中表达这个吗?如果有,怎么做?
在伪 SQL 中,我想我想要
Select Case.*
From Case some-kind-of-join Report
Where report.employee_id = the_given_employee_id
Group by Case.id
Order by Max(Report.date) Desc /* Report-less cases last */, Case.id /* etc. */
我是否需要通过 Report 引入从 Case 到 Employee 的多对多关系才能在 Django ORM 中执行此操作?
【问题讨论】:
-
你的实际模型是什么样的?你应该可以做类似
Case.objects.all().order_by('-date', 'another_field', 'a third field') -
我认为 Case.objects.all().order_by('-date') 不会查看 Report.date。我不愿意发布我的模型。
-
好吧,猜你的模型然后猜对你有帮助的查询是相当困难的。大概您正在使用 ForeignKeys,但除非您至少发布模型的抽象,否则推测没有多大意义
-
啊,对了,我以为我的 ForeignKey-ing 很明显。我最近的编辑有帮助吗?
标签: python sql django orm django-models