我有这种情况:
class X(models.Model):
name = models.CharField(max_length=50)
class Z(models.Model):
number = models.IntegerField()
class Y(models.Model):
name = models.CharField(max_length=50)
xs = models.ManyToManyField(X, null=True, blank=True)
zs = models.ManyToManyField(Z, null=True, blank=True)
我想获取所有X
个对象,并按Z
number
字段对其进行排序。
没有相关Y的对象或者他们的Y没有相关Z的对象应该被删除。
是否可以使用Django,使用可接受的SQL查询计数?或者我需要执行原始SQL查询?
示例输出:
| X.name | Y.name | Z.number
-----------------------------------
| x2 | y1 | 100
| | | 200
| |-----------------------
| | y2 | 100
| |-----------------------
| | y3 | 500
|----------------------------------
| x1 | y1 | 100
| | | 200
| |-----------------------
| | y4 | 400
| | | 100
|----------------------------------
| x3 | y5 | 300
x2首先是因为y3,z = 500 x1秒因为y4而z = 400 x3最后因为y5而z = 300。
答案 0 :(得分:1)
我认为你可以这样做:
from django.db.models import Max
X.objects.annotate(max_z=Max('y__zs__number')).order_by('max_z')