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')]
When I have a list of values of a specific field of a model object,
is there a way to implement a function that returns the model object in the same order in the list
and returns None
when the value does not exist?
I want to implement it using only Django ORM query without using for loop.
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')]
In this way, I can get list of objects in the same order,
but I don't know how to get None
when the value doesn't exist.