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で尋ねられた、誤って回答されたいくつかの重複した質問とほぼ重複した質問があります(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 に答える