Фильтровать набор запросов от начала до определенного объекта

#python #django

Вопрос:

Я знаю, что вы можете добавить [:n] в конец набора запросов, чтобы отфильтровать этот набор запросов от начала до n-го объекта. Например.

 qs = Item.objects.all()
range = qs[:5] # Returns first five objects
 

Возможно ли отфильтровать набор запросов от начала до определенного объекта? например

 qs = Item.objects.all()
obj = Item.objects.get(pk="123")
# How to return the qs from the beginning to obj?
 

Редактировать:
Я нашел следующие два решения… Я считаю y , что это наиболее эффективный? Есть ли лучший способ сделать это?

 x = (*qs,).index(obj)
return qs[:x]

y = list(qs.values_list("id", flat=True)).index(obj.id)
return qs[:y]
 

Комментарии:

1. Разве Item.objects.get(pk__lte="123") это не вариант?

2. @BrianDestura к сожалению, нет. Мой конкретный вариант использования — использование метода материализованного пути django-treebeard для вложенных данных. По сути, я хочу вернуть набор запросов всех потомков перед конкретным объектом. Итак, сортировка по pk, создание, изменение и т. Д. не будет работать

3. А. Использование treebeard было важным контекстом, поэтому вы можете захотеть обновить вопрос с его помощью. В любом случае, будет ли get_ancestors работать в соответствии с вашими требованиями?

4. @BrianDestura Мое начальное qs знакомство с django-treebeard в настоящее время Item.get_root().get_children()