使用Django(或简单的SQL) - 是否可以使用`through`表对m2m关系进行排序?

时间:2012-05-01 17:51:21

标签: django django-orm

class Dog(models.Model):
    name = models.CharField(max_length=255)
    toys = models.ManyToManyField('toys.Toy', through='dogs.DogToy')


class DogToy(models.Model):
    dog = models.ForeignKey('dogs.Dog')
    toy = models.ForeignKey('toys.Toy')
    sort_order = models.IntegerField()

    class Meta:
        unique_together = (
            ('dog', 'toy'),
            ('dog', 'sort_order'),
        )

使用上面的示例,我想使用关系的dog.toys.all()列订购sort_order,因为多只狗可能拥有相同的玩具,所以我无法按{{1}上的字段排序}。在查询之后我不能使用Pythonic排序,因为我的狗有成千上万的玩具,我需要使用分页来表现。

已经有一些重复且几乎重复的问题在SO上被错误地回答(答案相当于只使用Toy,这当然不起作用。)

1 个答案:

答案 0 :(得分:1)

通过中间表DogToy进行:

dog = Dog.objects.get(...)
ordered_toys = [dogtoy.toy for dogtoy in \
    DogToy.objects.filter(dog=dog).order_by('sort_order')]