Django - 困难的秩序(两个M2M关系)

时间:2014-04-17 12:38:05

标签: python django

我有这种情况:

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。

1 个答案:

答案 0 :(得分:1)

我认为你可以这样做:

from django.db.models import Max

X.objects.annotate(max_z=Max('y__zs__number')).order_by('max_z')