Заказать отфильтрованный запрос Queryset Count в Django - PullRequest
1 голос
/ 13 октября 2019

Я пытаюсь создать некий рейтинг: есть «студенты» и есть транзакции предметов. И если предмет является пивом, он засчитывается в beer_list.

Я написал это вручную, но это не отсортировано:

beer_list = {}
for transaction in Transactions.objects.all():
    if transaction.item.beer:
        if transaction.student.student_ID in beer_list:
            beer_list[transaction.student.student_ID]['beer_count'] += transaction.item_count
        else:
            beer_list[transaction.student.student_ID] = {
                'nickname': (transaction.student.nickname if transaction.student.nickname else 'Anon'),
                'beer_count': transaction.item_count
            }

Я попытался отсортировать его с beer_list = sorted(beer_list.items(), key=lambda x: x[1])но это выдает ошибку, что это сравнение нельзя использовать с помощью dict to dict использование.

Есть ли простое решение для этого? Я думаю о чем-то вроде Transactions.objects.filter(item.beer=True) и затем использую этот отфильтрованный список для подсчета объектов, возможно, с аннотацией?

1 Ответ

0 голосов
/ 13 октября 2019

Поскольку каждое значение из beer_list dict является dict, и вы хотите отсортировать элементы beer_list по клавише beer_count sub-dicts, вы должны заставить функцию key возвращать значение beer_count ключ каждого поддикта вместо:

beer_list = sorted(beer_list.items(), key=lambda x: x[1]['beer_count'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...