Задать вопрос
@nurzhannogerbek

Как составить правильный список записей связанных моделей данных?

Здравствуйте, помогите пожалуйста разобраться!

Есть две модели данных: Section (Секция), Product (Продукт).

models.py:
class Section(models.Model):
	name = models.CharField(max_length=255, blank=False, null=True,)

class Product(models.Model):
	name = models.CharField(max_length=255, blank=False, null=True,)
	section = models.ForeignKey(Section,on_delete=models.CASCADE)


Хочу вывести в template все секции и относящие к этой секции продукты. Использовал для этого встроенный в Django тег regroup (см. ниже), но стокнулся с проблемой. Во первых не выводятся секции у которых нет продуктов. Во вторых есть продукты у которых в поле section в БД стоит NULL их тоже нужно сгруппировать. Что можете посоветовать? Был бы очень благодарен примером.

views.py:
context['products'] = Product.objects.select_related('section').order_by('section')


template:
{% regroup products by section as products_by_section %}

{% for section in products_by_section %}
    {{ section.grouper}}
    {% for product in section.list %}
        {{ product }}
    {% endfor %}
{% endfor %}
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@nurzhannogerbek Автор вопроса
Решил задачу следующим образом.

views.py:
# Получаем все секции
sections = Section.objects.all().prefetch_related('product_set')

# Cоздаем словарь с секциями и принадлежащим им продуктам
section_products_dict = {}
for section in sections:
    section_products_dict[section.id] = section.product_set.all()

# Передаем наш словать в шаблоне
context['dictionary'] = section_products_dict


template:
{% for section, products in dictionary.items %}
    {{section}}
    {% for product in products %}
        {{product}}
    {% endfor %}
{% endfor %}


Для продуктов у которых нет привязки к секции нужно создать отдельный queryset во view.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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