Django Foreign Key

У меня есть одна категория. Как я могу получить все товары, которые связаны с этой категорией в шаблоне? Типа вот так:

{% for category in categories %}
    {{ category.products }}
{% endfor %}

models.py

class Category(models.Model):
    title = models.CharField(max_length=50, unique=True, verbose_name='Категория')
    slug = models.CharField(max_length=50, blank=True, unique=True)
    image = models.ImageField(upload_to='categories/img/', verbose_name='Фотография')


class Product(models.Model):
    title = models.CharField(max_length=99, blank=True, verbose_name='Название')
    price = models.IntegerField(blank=True, null=True, verbose_name='Цена')
    image = models.ImageField(upload_to='products/img/', verbose_name='Фотография')
    availability = models.BooleanField(default=False, blank=True, verbose_name='Наличие')
    popular = models.BooleanField(default=False, blank=True, verbose_name='Популярность товара')
    category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True, verbose_name='Категория')

Category.objects.filter(ну и тут ваш код) - это даст какие-то категории. Если вы хотите продукты, вам нужно Product.objects.filter(category=[тут pk категории])

Вы можете в ForeignKey использовать related_name аргумент. Он позволит обращаться к связанным данным.

class Category(models.Model):
    pass

class Product(models.Model):
    category = models.ForeignKey(Category, ... related_name='products')

И теперь в вашем шаблоне можно получить все продукты, используя примерно такой код:

{% for category in categories %}
    {% for product in category.products.all %}
        {{ product.title }}
        ...
    {% endfor %}
{% endfor %}

Вот тут подробнее можно узнать об этом

Вернуться на верх