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

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

Есть модель с категориями (сап доски, весла, гидроботы и тд) и модели с соответствующими товарами, где FK ссылается на категорию
class category(models.Model):
    category_name = models.CharField(max_length=70, verbose_name='Категория')
    class Meta:
        verbose_name = "Категории товаров "
    def __str__(self):
        return self.category_name

class sup(models.Model):
    cat = models.ForeignKey(category, on_delete=models.CASCADE, verbose_name='Категория')
    article = models.PositiveBigIntegerField(blank=True, null=True, verbose_name='Код')
    name = models.CharField(max_length=100, blank=True, verbose_name='Наименование')
    class Meta:
        verbose_name = "SUP борды "
    def __str__(self):
        return self.name

class paddle(models.Model):
    cat = models.ForeignKey(category, on_delete=models.CASCADE, verbose_name='Категория')
    article = models.PositiveBigIntegerField(blank=True, null=True, verbose_name='Код')
    name = models.CharField(max_length=100, blank=True, verbose_name='Наименование')
    class Meta:
        verbose_name = "Весла "
    def __str__(self):
        return self.name

class boot(models.Model):
    cat = models.ForeignKey(category, on_delete=models.CASCADE, verbose_name='Категория')
    article = models.PositiveBigIntegerField(blank=True, null=True, verbose_name='Код')
    name = models.CharField(max_length=100, blank=True, verbose_name='Наименование')
    class Meta:
        verbose_name = "Гидроботы "
    def __str__(self):
        return self.name


Можно ли как то вытащить через модель категории ВСЕ привязанные объекты, не прописывая в шаблоне для каждой категории {{ category.sup_set.all }} ? Ибо категорий будет много, дабы вручную это все не прописывать.
  • Вопрос задан
  • 137 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
nnnLik
@nnnLik
Capybara god
ну наверное как то так

class category(models.Model):
    category_name = models.CharField(max_length=70, verbose_name='Категория')

    class Meta:
        verbose_name = "Категории товаров"

    def __str__(self):
        return self.category_name

    def get_related_items(self):
        related_items = []
        related_items.extend(list(self.sup_set.all()))
        related_items.extend(list(self.paddle_set.all()))
        related_items.extend(list(self.boot_set.all()))
        return related_items


и вытащить можно будет обратившись к get_related_items

{% for category in categories %}
    <h2>{{ category.category_name }}</h2>
    <ul>
        {% for item in category.get_related_items %}
            <li>{{ item.name }}</li>
        {% endfor %}
    </ul>
{% endfor %}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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