@odmin4eg

проблема с выводом таблицы результатов

День добрый, давно голову не разминал. теперь вот не знаю как «Django way» решить такую вот проблему.

Идут соревнования, есть набор точек (point) на которых стоят судьи (moderator) судья отмечает, что экипаж (bortn) проехал точку в такое-то время.
всё тут просто и понятно.
Пока не накладываем такое условие.

Модератор не всегда может вовремя отмечать на сайте положение экипажа.
может получится, что первая отметка на сайте у экипажа например 888 будет только под номером 5.

а таблицу надо отображать примерно вот в таком виде


Весь вопрос встаёт в правильности размещения в хтмле шаблона.

во Views.py я получаю всех участников примерно так
...... 
         bn = bort.objects.all()
        context['items'] = bn
        return context


есть примерно такая модель
class bort(models.Model):
    bortn = models.IntegerField(verbose_name=u'Бортовой номер')
    comment = models.CharField(max_length=200, verbose_name=u'Комментарий' )

#Получаю все результаты для участника
    def alltime(self):
        at = ktime.objects.filter(borts=self)



class ktime(models.Model):
 KV_CHOICES = (
        (0, u'kv0'),
        (1, u'kv1'),
        ......
        )
    point = models.IntegerField(max_length=200,choices=KV_CHOICES, verbose_name=u'Точка')
    borts = models.ForeignKey(bort,verbose_name=u'Бортовой номер')
    chas = models.CharField(max_length=15,choices=Hor_CHOICES, verbose_name=u'Часы' )
    min = models.CharField(max_length=15, choices=Min_CHOICES, verbose_name=u'Минуты' )
    author = models.ForeignKey(User, null = True, blank = True , verbose_name=u'Модератор')

    def get_time(self):
        return u'%s:%s' %(self.chas, self.min)

    class Meta:
        verbose_name = 'Контроль времени'
        verbose_name_plural = 'Контроль времени'

    class Admin:
        pass

    def __unicode__(self):
        return u'точка %s - борт %s - время %s : %s' % (self.point, self.borts, self.chas, self.min)


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


это если в шаблоне выводить примерно так

<table>
     <tr>
         <td>№   /  Точка</td><td>kv1</td><td>kv2</td><td>kv3</td><td>kv4</td><td>kv5</td>
     </tr>
     {%  for p in items %}
        <tr>
            <td>{{ p.bortn }}</td>
                {% for is in p.alltime %}
                    <td>  {{ is.get_time }} </td>
                {% endfor  %}
        </tr>
    {% endfor %}
</table>


дальше меня понесло не по тому пути, я попробовал, добавить ещё один цикл внутрь и проверять мол если шаг внутреннего цикла == ид point то мол рисуем. время иначе рисуем пустые … примерно так

{% for x in 'xxxxxxx' %}
    {% if forloop.counter0 == is.point %}
       <td>  {{ is.get_time }} </td>
    {% else %}
       <td> </td>
    {% endif %}
{% endfor %}


но это всё в корне неверно потому что и цикл я прервать не могу после удачного результат ни…

в общем встаёт вопрос как дальше пойти? может быть модель неверная для такой организации вывода результата, может я чёт не так понимаю…
думал уже над тем как заполнять что-то типо матрицы (двумерный массив) с результатами пустые ячейки 0 и в результат время вписываать.
в общем прошу совета
  • Вопрос задан
  • 2717 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alz
Во вьюхе разложите отметки времени как вам надо, не пытайтесь достичь этого в шаблонах
Разложите сначала все по словарям, потом с их помощью сформируйте списки отметок времени
Ответ написан
Комментировать
Если количество точек ограничено, то каждое время выводите в свой спан:
<div>
<span class="point_1">12:20</span>
<span class="point_3">13:40</span>
</div>

а в css выставьте разные маржины у классов point_n.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы