Django — Зацикливание на уникальном поле модели в шаблоне

#python #django #django-templates

#python #django #django-шаблоны

Вопрос:

У меня есть модель, в которой есть поле выбора, category которое пользователь должен ввести при отправке записи. Я хотел бы создать представление, в котором каждая категория имеет свой собственный заголовок (только один раз), поэтому каждая уникальная категория будет иметь свой собственный заголовок, а затем отображать title связанные с каждой категорией.

models.py

 class Position(models.Model):
    club_functions = Choices('Corporate Relations', 'Events amp; Conference', 'Marketing amp; Operations', 'Software Development', 'Product')
    title = models.CharField(max_length=50)
    category = models.CharField(choices=club_functions, max_length=30, blank=False)
    description = models.TextField(blank=True)
    spec_q1 = models.CharField(max_length=500)
    spec_q2 = models.CharField(max_length=500)
  

views.py

 def position_list_view(request):
    all_objects = Position.objects.all()
    context = {
        'object_list' : all_objects
    }
    return render(request, "exec_list.html", context)
  

exec_list.html

 {% for object.category in object_list %}

    <h3>{{ object.category }}</h3>
    <p>{{ object.title }}</p>


{% endfor %}
  

Есть идеи о том, как это сделать?

Ответ №1:

вы можете использовать перегруппировку

 {% regroup object_list by category as category_list %}

<ul>
    {% for category in category_list %}
        <li>{{ category.grouper }}
            <ul>
            {% for position in category.list %}
                <li>{{ position.title }}</li>
            {% endfor %}
            </ul>
        </li>
    {% endfor %}
</ul>
  

Комментарии:

1. Именно то, что я искал. Начал играть с перегруппировкой после публикации этого, и это, похоже, лучшее решение. Спасибо.