WedX - журнал о программировании и компьютерных науках

Джанго — неожиданный результат перегруппировки

Это редактирование более раннего вопроса: я думаю, что перегруппировка - это то, что я ищу здесь, но предлагаю любые предложения по другому подходу. Я пытаюсь создать html-таблицу для приложения для подсчета очков для многопользовательской игры в нарды (называемой шуэт). Типичный оценочный лист выглядит примерно так: этим.

Для текущих целей я исключил столбец «выигрыш/проигрыш», который будет вычисляемым значением, и позже я буду беспокоиться о том, как сделать так, чтобы заголовки «Позиция» и «Счет» соответствовали заголовкам «Игрок».

В приведенном ниже коде я попытался использовать перегруппировку для вывода строк, показывающих номер игры для первого столбца, а затем счет и позицию для каждого игрока в этой игре. Однако вывод продолжает генерировать новые строки для каждого игрока для каждой игры, как показано здесь. Я заказал игру в представлении, поэтому я не понимаю, почему они не группируются.

Модели:

class Chouette(models.Model):
    date = models.DateTimeField()
    location = models.CharField(max_length=100)
    stake = models.IntegerField()

    def __unicode__(self) :
        return unicode(self.id)


class Position(models.Model):
    POSITION_CHOICES = (
    ('b', 'b'),
    ('c', 'c'),
    ('2', '2'),
    ('3', '3'),
    ('4', '4'),
    ('5', '5'),
    ('6', '6'),
    ('7', '7'),
    ('8', '8'),
    )
    position = models.CharField(max_length=10, choices=POSITION_CHOICES)

    def __unicode__(self) :
        return unicode(self.position)

class Player(models.Model):
    user = models.OneToOneField(User)
    handle = models.CharField(max_length=10)

    def __unicode__(self) :
        return unicode(self.handle)

class Game(models.Model):
    number = models.IntegerField()
    chouette = models.ForeignKey(Chouette)        

    def __unicode__(self) :
        return unicode(self.number)

class Score(models.Model):
    game = models.ForeignKey(Game)
    player = models.ForeignKey(Player)
    position = models.ForeignKey(Position)
    score = models.IntegerField()

Вид:

from django.shortcuts import render
from chouette.models import Score, Game

#chouette=1

def scores(request):
    p_list = Score.objects.filter(game__chouette=1).distinct('player').order_by('player')
    s_list = Score.objects.filter(game__chouette=1).order_by('game','player')
    return render(request, 'scores.html', {'player_list': p_list, 'score_list': s_list})

Шаблон:

<!doctype html>
<html>
    <head></head>
    <body>
    <table>
        <tr>
        {% for player in player_list %}
            <th>{{ player.player }}</th>
        {% endfor %}
        </tr><tr>
        <th>Game</th>
        {% for player in player_list %}
            <th>Score</th><th>Position</th>
        {% endfor %}
        {% regroup score_list by game as list_by_game %}
            {% for game in list_by_game %}
            <tr><td>{{ game.grouper }}</td>
                    {% for g in game.list %}
                    <td>{{ g.score }}</td>
                    <td>{{ g.position }}</td>
                    {% endfor %}   
            {% endfor %}</tr>
        </table> 
    </body>
    </html>

Спасибо за любую помощь и за ваше терпение с новичком в Django.


Ответы:


1

Проблема заключалась в том, что форма по умолчанию в админке Django была настроена таким образом, что для каждого счета создавался новый игровой pk; изменили форму так, чтобы в каждой игре был только один ПК.

Все еще не уверен, что перегруппировка является лучшим решением моей проблемы, поскольку она заставляет меня вставлять нулевые или пустые записи для игроков, у которых есть результаты для некоторых, но не для всех игр, чтобы другие результаты отображались в правом столбце.

19.05.2014
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]