Сортировка 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/

Вернуться на верх