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
,这当然不起作用。)
答案 0 :(得分:1)
通过中间表DogToy进行:
dog = Dog.objects.get(...)
ordered_toys = [dogtoy.toy for dogtoy in \
DogToy.objects.filter(dog=dog).order_by('sort_order')]