带有'order_with_respect_to'的Django模型:如何获取对象顺序?

时间:2018-02-22 20:57:29

标签: django django-models

我有两个order_with_respect_to关系模型:

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()

但是我需要反向操作:给出一章,我想知道它的位置。我知道有一个生成的_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)

但感觉很脏:每次我想知道章节的顺序时,我必须得到整个订单清单。我认为这应该只是一章的属性。

有没有更干净的方法呢?

1 个答案:

答案 0 :(得分:1)

只需使用index类型的list方法,如下所示:

position = chapters.index(my_chapter.id)