Я хочу получать только товары определенной категории (женщины) из базы данных в Джнаго - PullRequest
0 голосов
/ 29 ноября 2018
 {% regroup products by categories as products_by_category %}
    {% for c in products_by_category %}
       <h1>{{c.grouper}}</h1>
       <ul>
        {% for p in c.list %}
            <li>{{p.name}}</li>
            <li> <img src="{{ MEDIA_URL }}{{ p.image.url }}" alt="IMG-PRODUCT" height="290" width="190"></li>
            <li>{{ p.price }}</li>
        {% endfor %}
       </ul>
    {% endfor %}

Это мой Views.py

def product_list_women(request, category_slug=None):
    category = None
    categories = Category.objects.filter(name='women', slug='women')
    products = Product.objects.filter(available=True)
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = products.filter(category=categories)
    return render(request, 'product_women.html',{'category': category,'categories':categories,'products':products})

И это мой файл models.py

class Category(models.Model):
    name = models.CharField(max_length=150, db_index=True)
    slug = models.SlugField(max_length=150, unique=True ,db_index=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ('name', )
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('demo:category', args=[self.slug])

    def get_products(self):
        return Product.objects.filter(category=self)


class Product(models.Model):
    category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE)
    name = models.CharField(max_length=100, db_index=True)
    slug = models.SlugField(max_length=100, db_index=True)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    stock = models.PositiveIntegerField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True)

    class Meta:
        ordering = ('name', )
        index_together = (('id', 'slug'),)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('demo:product_detail', args=[self.id, self.slug])

Я хочу перечислить только женские товары вместо всех продуктовМудрая категория. Я хочу создавать страницы, на которых отображаются продукты, когда я нажимаю на эту категорию. Этот код показывает все категории продуктов. Как я могу это сделать?

1 Ответ

0 голосов
/ 29 ноября 2018

Согласно Документация Django «Много-к-одному» :

Связанные менеджеры также поддерживают поиск на местах.API автоматически следит за отношениями, насколько вам нужно.Используйте двойные подчеркивания для разделения отношений.Это работает столько уровней, сколько вы хотите.Там нет предела.

Таким образом, вы можете сделать что-то вроде этого:

products = Product.objects.filter(available=True, category__name='women')
...