Как я могу получить доступ к нескольким наборам запросов в шаблоне в одном цикле? - PullRequest
0 голосов
/ 28 марта 2020

Я передаю разные похожие наборы запросов в шаблон. Например. qset01, qset02, ... qset10. Количество наборов запросов известно и может быть перенесено. Как я могу получить доступ к этим наборам запросов в шаблоне в цикле на том же уровне итерации. Когда я повторяю один запрос, код выглядит так:

{% for i in qset01 %}
    {{i.field_01}}
{% endfor %}

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

{% for more_complex_iteration %}
    {{qset01.field_01}}, {{qset02.field_01}}, ... {{qset09.field_01}}
{% endfor %}

В качестве альтернативы можно объединить несколько наборов запросов. Но я не знаю как. qset01 имеет данные

country_1, 100
country_2, 200
country_3, 300

qset02 имеет данные

country_1, 111
country_2, 222
country_3, 333

qset03 имеет данные

country_1, 101
country_2, 202
country_3, 303

окончательный набор запросов должен иметь эти данные

country_1, 100, 111, 101
country_2, 200, 222, 202
country_3, 300, 333, 303

view.py

 def function(request):
    iteration_result = "i_01" #this is the first iteration result only
                              #from ["i_01","i_02", ... "i_09"]
    qset1 = BigTable.objects.values(
        'deb_nr_f__dcountry__wcode_f__code',
        'deb_nr_f__dcountry__wcode_f__code_name',
        ).annotate(
            tmp_code=F('deb_nr_f__dcountry__wcode_f__code'),
            tmp_descr=F('deb_nr_f__dcountry__wcode_f__code_name')
            ).values('tmp_code','tmp_descr'
        ).order_by('-abs_2016__sum'
        ).annotate(
            abs_2016__sum=Sum('abs_2016'),
        ).filter(id_nr_f__ie_code__unomer_f__nomer=iteration_result,
        )

Определение модели

 class BigTable(models.Model):
    deb_nr_f = models.ForeignKey(Debitor, on_delete=models.CASCADE, related_name='debitor_fnr', verbose_name='Debitor FNr', blank=True, null=True)
    id_nr_f = models.ForeignKey(Material, on_delete=models.CASCADE, related_name='material', verbose_name='Material', blank=True, null=True)
    abs_2016 = models.IntegerField('Abs. 2016', default=0)
    abs_2017 = models.IntegerField('Abs. 2017', default=0)
    abs_2018 = models.IntegerField('Abs. 2018', default=0)
    abs_2019 = models.IntegerField('Abs. 2019', default=0)
    abs_2020 = models.IntegerField('Abs. 2020', default=0)

Я бы хотел ОТДЕЛЬНО отфильтровать таблицу с помощью числа (9) различных «фильтрующих» запросов. Мне нужен один последний Queryset, такой как этот, где каждый столбец (кроме первого) является результатом 9 отдельных запросов «filter».

country_1, 100, 111, 101
country_2, 200, 222, 202
country_3, 300, 333, 303

1 Ответ

0 голосов
/ 28 марта 2020
querySets = [ qset01, qset02, ... ]
context = { 'querySets': querySets, ....}


{% for set in querySets %}
    {{ set.country_1 }}
{% endfor %}
{% for set in querySets %}
    {{ set.country_2 }}
{% endfor %}
{% for set in querySets %}
    {{ set.country_3 }}
{% endfor %}

, если вы хотите сделать что-то подобное

{% for country_line in querySets %}
    {% for country in country_line %}
        {{ country }}
    {% endfor %}
{% endfor %}

Ваши данные должны быть упорядочены как

[
    [ country_1, country_1, country_1 ],
    [ country_2, country_2, country_2 ],
    [ country_3, country_3, country_3 ],
]
...