Заказать Django набор запросов другим диктом - PullRequest
1 голос
/ 26 марта 2020

Итак, сейчас у меня есть эта модель и вычисляемый словарь

class User(models.Model):
    user_id = models.AutoField(primary_key=True)


#scores dict {user_id: score}
scores = {1: 9, 2: 2, 3: 1, 4: 5}

Мне нужно упорядочить набор запросов на основе каждого пользовательского балла в dict счета. Примерно так

Views.py

queryset.annotate(score=scores['user_id']).order_by('score')

1 Ответ

0 голосов
/ 26 марта 2020

Вы можете сделать это, но это довольно «странно»:

from django.db.models import Case, IntegerField, Value, When

queryset.annotate(
    score=Case(
        *[When(user_id=k, then=Value(v)) for k,v in scores.items()]
        default=None,
        output_field=IntegerField(null=True)
    )
).order_by('score')

Вероятно, лучше просто сохранить результаты в соответствующей модели User (на которую ссылается user_id) ).

...