Сортировка django queryset с использованием временного поля, не указанного в модели
Моя модель выглядит следующим образом:
class People(models.Model):
name = models.charfield(max_length = 200)
surname = models.charfield(max_length = 200)
В моей функции:
people_list = People.objects.all()
for each in people_list:
if some_conditions:
each.level = 1
else:
each.level = 2
Мне нужно отсортировать список people_list, используя добавленную мной переменную level.
Я получаю FieldError при попытке сделать
people_list = people_list.order_by('level')
Вы можете аннотировать дополнительное поле с условным значением и сделать заказ, используя это поле. Вот пример.
People.objects.annotate(level=Case(When(condition,then=Value(1)),default=Value(2),output_field=IntegerField())).order_by('level')
Документ, связанный с "Когда дело", https://docs.djangoproject.com/en/4.0/ref/models/conditional-expressions/