Django ORM - сортировка по имени и количеству баллов - PullRequest
1 голос
/ 23 января 2020

У меня есть две модели:

class Game(models.Model):
    name = models.CharField(max_length=255)
    ...

class Score(models.Model):
    score = models.BigIntegerField()
    game = ForeignKey(Game, blank=True, null=True, on_delete=models.PROTECT)
    ...

И я хотел бы упорядочить все оценки по:

  1. Название игры
  2. Счет в игре

Итак, я хочу получить следующие результаты:

Игра A

  • 100.000
  • 90.000
  • 80.000

Игра B

  • 50.000

  • 40.000

  • 30.000

Игра C

  • 200.000

  • 190.000

  • 180.000

Надеюсь, вы поняли идею. Спасибо!

1 Ответ

3 голосов
/ 23 января 2020

Простой order_by в ORM в сочетании со встроенным тегом шаблона regroup сделает именно то, что вы ищете. Пример в Django документах для regroup - это почти то, что вы пытаетесь сделать.

Я предполагаю, что ваша Score модель имеет ForeignKey для Group модель.

По вашему мнению, вы бы сделали что-то вроде этого:

# views.py

class ScoreListView(ListView):
    model = Score

    queryset = Score.objects.select_related('game') \
                            .order_by('game__name', '-score')
# score_list.html

<!-- other content -->

{% regroup scores by game as game_list %}

{% for game, game_scores in game_list %}
<h2>{{ game }}</h2>
<ul>
  {% for score in game_scores %}
    <li>{{ score.score }}</li>
  {% endfor %}
</ul>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...