0
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列进行排序,因为多只狗可能有相同的玩具,所以我不能按字段排序Toy。查询后我不能使用 Pythonic 排序,因为我的狗有成千上万的玩具,我需要使用分页来进行性能。

在 SO 上提出了一些重复且几乎重复的问题,这些问题的回答不正确(答案等同于 using dog.toys.order_by('sort_order'),这当然不起作用)。

4

1 回答 1

1

通过中间表 DogToy 执行此操作:

dog = Dog.objects.get(...)
ordered_toys = [dogtoy.toy for dogtoy in \
    DogToy.objects.filter(dog=dog).order_by('sort_order')]
于 2012-05-05T14:43:44.477 回答