Как использовать шаблоны для отображения полей из двух таблиц (с использованием FK)

#django #django-models #django-views #django-templates

#django #django-модели #django-представления #django-шаблоны

Вопрос:

В моем шаблоне я хотел бы показать «проблемы», сгруппированные по «категории», например

Категория 1

  • Задача 1
  • Задача 2

Категория 2

  • Задача 3
  • Задача 4

Вот мой models.py:

 class Category(models.Model):
  title = models.CharField(max_length=100)
  description = models.CharField(max_length=400)

class Challenge(models.Model):
  category = models.ForeignKey(Category, on_delete=models.CASCADE)
  question_text = models.CharField(max_length=200)
  answer_text = models.CharField(max_length=200)
  

В моем файле шаблона я хочу сделать что-то вроде этого:

 {% for category in category_list %}
    {{ category.title }}
    <ul>
        {% for challenge in Challenge.objects.get(category_id=category.id) %}
        <li>{{ challenge.question_text }}</li>
        {% endfor %}
    </ul>
{% endfor %}
  

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

Ответ №1:

Предполагая, что ваш category_list является набором запросов, вы можете получить связанные значения запроса через отношение «Многие к одному»

 {% for category in category_list %}
    {{ category.title }}
    <ul>
        {% for challenge in category.challenge_set.all %}
        <li>{{ challenge.question_text }}</li>
        {% endfor %}
    </ul>
{% endfor %}