Шаблон не может оценить набор запросов базы данных django - PullRequest
1 голос
/ 22 сентября 2019

Я работаю через эту проблему.Я надеюсь, что могу описать это хорошо.

Случай:

Предположим, у меня есть следующие типы или идентификаторы:

classes = ['classa','classb','classc','classd']

, и я также имею для каждогоиз вышеупомянутого класса, эти два подкласса:

subclasses = ['suba','subb']

Теперь я собираюсь извлечь точки данных из базы данных, отфильтрованной по этим классам и подклассам, используя функцию в моей модели, назвав ее get_data_filtered(a,b) следующим образом:

context['custom-data'] = (
            {c: {subc: self.get_object().get_data_filtered(c,subc)} for c in
             classes for subc
             in subclasses})

При печати этого контекста в консоли на уровне просмотра все в порядке.Однако при передаче его в шаблон и доступе к нему там данные не извлекаются!

При просмотре шаблона с использованием Django Debug Toolbar контекст шаблона показывает это:

context['custom-data']:'<<triggers database query>>'

Синтаксис на уровне шаблона похож на:

{% for i in custom-data.classa.suba %}
    ....
{% endfor %}

Мой анализ

Я думаю, что набор запросов никогда не оценивался таким образом.Я также пытался поставить .all() и list(...), но не получил ничего полезного!

Может ли набор запросов оцениваться таким образом?

Если есть лучший способ решить такую ​​задачу, пожалуйста, посоветуйте.

Версия Django: 2.2

1 Ответ

0 голосов
/ 23 сентября 2019

Я понял, что неправильно обращался к контексту на уровне шаблона.Доступ осуществляется по ключам, следующим образом:

{% for c,subcdict in custom-data.items %}
    {% for subckey,objlist in subcdict.items %}
        {% for obj in objlist %}
            <p>{{ obj.prop }}</p>
        {% endfor %}
    {% endfor %}
{% endfor %}

Спасибо за замечания @ moh369 в комментариях к посту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...