带有'的Django模型;以尊重的态度订购:如何获得对象顺序?

带有'的Django模型;以尊重的态度订购:如何获得对象顺序?,django,django-models,Django,Django Models,我有两个模型,它们的顺序与关系如下: class Book(models.Model): pass class Chapter(models.Model): book = models.ForeignKey(Book, on_delete=models.CASCADE) class Meta: order_with_respect_to = 'book' 我知道我可以得到这样的章节顺序: my_book.get_chapter_order() my

我有两个模型,它们的顺序与关系如下:

class Book(models.Model):
    pass

class Chapter(models.Model):
    book = models.ForeignKey(Book, on_delete=models.CASCADE)

    class Meta:
        order_with_respect_to = 'book'
我知道我可以得到这样的章节顺序:

my_book.get_chapter_order()
my_chapter = Chapter.objects.get(pk=WHATEVER)
chapters = my_book.get_chapter_order()

for position, chapter_id in enumerate(chapters):
    if chapter_id == my_chapter.id:
        break

print(position)
但我需要反向操作:给定一章,我想知道它的位置。我知道有一个生成的
\u order
字段,但它是私有的,所以我不想使用它

我的第一个方法是这样的:

my_book.get_chapter_order()
my_chapter = Chapter.objects.get(pk=WHATEVER)
chapters = my_book.get_chapter_order()

for position, chapter_id in enumerate(chapters):
    if chapter_id == my_chapter.id:
        break

print(position)
但是感觉很脏:每次我想知道一章的顺序时,我都必须得到完整的顺序表。我认为这应该只是一章的财产


有更干净的方法吗?

只需使用
列表
类型的
索引
方法,如下所示:

my_book.get_chapter_order()
my_chapter = Chapter.objects.get(pk=WHATEVER)
chapters = my_book.get_chapter_order()

for position, chapter_id in enumerate(chapters):
    if chapter_id == my_chapter.id:
        break

print(position)
position=chapters.index(my_chapter.id)