Установлен флажок в шаблоне Django, если object.val == true

Если вы используете SQL Server 2005+, вы можете использовать функцию PIVOT для преобразования данных из строк в столбцы.

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

Сначала рассмотрим некоторые быстрые определения таблиц и данные для использования:

CREATE TABLE #yt 
(
  [Store] int, 
  [Week] int, 
  [xCount] int
);

INSERT INTO #yt
(
  [Store], 
  [Week], [xCount]
)
VALUES
    (102, 1, 96),
    (101, 1, 138),
    (105, 1, 37),
    (109, 1, 59),
    (101, 2, 282),
    (102, 2, 212),
    (105, 2, 78),
    (109, 2, 97),
    (105, 3, 60),
    (102, 3, 123),
    (101, 3, 220),
    (109, 3, 87);

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

select *
from 
(
  select store, week, xCount
  from yt
) src
pivot
(
  sum(xcount)
  for week in ([1], [2], [3])
) piv;

См. SQL Demo

Затем, если вам нужно сгенерировать неделю номер динамически, ваш код будет:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(Week) 
                    from yt
                    group by Week
                    order by Week
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT store,' + @cols + ' from 
             (
                select store, week, xCount
                from yt
            ) x
            pivot 
            (
                sum(xCount)
                for week in (' + @cols + ')
            ) p '

execute(@query);

См. SQL Demo .

Динамическая версия генерирует список номеров week, которые должны преобразуется в столбцы. Оба дают тот же результат:

| STORE |   1 |   2 |   3 |
---------------------------
|   101 | 138 | 282 | 220 |
|   102 |  96 | 212 | 123 |
|   105 |  37 |  78 |  60 |
|   109 |  59 |  97 |  87 |

1
задан Lynx 13 July 2018 в 08:14
поделиться

1 ответ

Вы можете сделать это, например, с тегом {% if ... %}:

{% for player in players %}
<tr>
  <td>
  <input type="checkbox" name="player_check"{% if player.player_check %} checked{% endif %}>
  </td>
</tr>
{% endfor %}

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

2
ответ дан Willem Van Onsem 17 August 2018 в 13:22
поделиться
  • 1
    Благодаря! За несколько минут до того, как вы ответили, я узнал, как это сделать, но ваше предложение намного лучше. Я использовал, если оператор с одним флажком выключен, а в другом я написал код для второго флажка, который включен. Теперь я должен его изменить;) Спасибо за ответ! – Adrian Kurzeja 13 July 2018 в 08:35
  • 2
    @AdrianKurzeja: хорошо, что тоже будет работать :), но делает его менее расширяемым. Если позже вы добавите другие атрибуты в тег <input>, это будет означать, что вам нужно указать их дважды (и, возможно, даже больше). – Willem Van Onsem 13 July 2018 в 10:52
Другие вопросы по тегам:

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