Как получить QuerySet со значениями определенного поля в Django, сохраняя порядок?
class Book(models.Model):
name = models.CharField(max_length=10)
Book.objects.bulk_create([
Book(name='A'),
Book(name='B'),
Book(name='C'),
])
book_names = ['C', 'D', 'A', 'B']
some_func(book_names)
# >>> [Book(name='C'), None, Book(name='A'), Book(name='B')]
Когда у меня есть список значений определенного поля объекта модели,
есть ли способ реализовать функцию, которая возвращает объект модели в том же порядке в списке
и возвращала None
, если значение не существует?
Я хочу реализовать это, используя только Django ORM запрос без использования цикла for.
preserved = Case(*[When(name=name, then=pos) for pos, name in enumerate(book_names)])
Book.objects.filter(name__in=book_names).order_by(preserved)
# >>> [Book(name='C'), Book(name='A'), Book(name='B')]
Таким образом, я могу получить список объектов в том же порядке,
но я не знаю, как получить None
, когда значение не существует.