Я написал запрос для сортировки количества запросов по наибольшему или наименьшему числу. В основном система рейтинга.

    users = Referrals.objects.values('friend_id').annotate(Count('friend_id')).order_by('-friend_id__count')

Возвращает значение в формате JSON, как это

<QuerySet [{'friend_id': 1, 'friend_id__count': 2}, {'friend_id': 5, 'friend_id__count': 1}]>

Теперь friend_id представляется первичным ключом и да, он ссылается на правильный (ые) ключ (и) в моей БД ... но я понятия не имею, получить ли он, чтобы он выводил реальное имя / адрес электронной почты или что-то еще на основе этого PK?

Это мой шаблон, где я бы хотел, чтобы он отображал рейтинг.

                  {% for a in users %}
                  <tr>
                      <td>{{a}}</td>
                      <td>{{a}}</td>
                  </tr>

                  {% endfor %}

Вот мой полный взгляд на то, что стоит.

@login_required
def statspage(request):
    users = Referrals.objects.values('friend_id').annotate(Count('friend_id')).order_by('-friend_id__count')
    print(users)

    context = {
        'users': users,
    }

    return render(request, 'stats.html', context)

Еще один вопрос - возможна ли фильтрация на основе логического значения, существующего в модели User?

1
Ronald Langeveld 24 Сен 2018 в 16:29

2 ответа

Лучший ответ

Предполагая, что friend является моделью FK to User, в которой есть поля с именами email и first_namelast_name), вы можете указать эти поля в {{X5} }} часть следующим образом:

Referrals.objects.values('friend_id', 'friend__email', 'friend__first_name') ...
2
ozgur 24 Сен 2018 в 13:36

Попробуйте код ниже

users = Referrals.objects.all().annotate(
    friend_count=Count('friend_id')
).order_by('-friend_count')

Когда вы используете values, он вернет только тот столбец БД, который вы указали.

В шаблоне вы можете получить доступ как

{% for user in users %}
      <tr>
        <td>{{user.first_name}}</td>
        <td>{{user.last_name}}</td>
        <td>{{user.friend_count}}</td>
      </tr>

 {% endfor %}
0
anjaneyulubatta505 24 Сен 2018 в 13:36