首页 > 解决方案 > 在 Django 中按类别显示对象

问题描述

我正在构建一个电子商务应用程序,我想制作一个按类别显示一些特色项目的部分。我正在使用三个显示这些项目的滑块;每个滑块都是一个特色类别,滑块中的每个项目都是一个特色项目。问题是我无法弄清楚如何将项目分配给正确的滑块。例如:我想将 JeansJacket 分配给“衣服和配饰”并显示它。我试过这个:

{% for cat in categories %}
    <h1>{{ cat.cat_name }}</h1>
     <!--(carousel code in between)-->
        <div class="carousel-inner" role="listbox">
        {% for item in featured_items %}
            {% if item.Categoría in cat.cat_name %}
                {{ item }}
            {% endif %}

这是我所拥有的简化版本,没有其余内容。我只是不知道如何迭代特色项目并将它们显示在相应的类别中。

编辑:这是在models.py中:

class Categorías(models.Model):
    cat_name = models.CharField(max_length=30)
    Destacado = models.BooleanField()
    class Meta:
        ordering = ('cat_name',)
        verbose_name = 'Categoría'
        verbose_name_plural = 'Categorías'
    def __str__(self): 
        return self.cat_name

class publicaciones(models.Model):
    Título = models.CharField(max_length=30)
    Descripción = models.TextField(max_length=200)
    Precio = models.FloatField()
    Fotos = models.ImageField()
    Categoría = models.ForeignKey(Categorías, on_delete=models.CASCADE)
    Promocionado = models.BooleanField()
    class Meta:
        verbose_name = 'Publicación'
        verbose_name_plural = 'Publicaciones'
    def __str__(self):
        return self.Título

标签: pythonhtmldjango

解决方案


您可以使用prefetch_relatedPrefetch自定义查询来获取每个类别的所有相关文章。

categories = Categorías.objects.prefetch_related(Prefetch(
    'publicaciones_set',
    queryset=publicaciones.objects.filter(Promocionado=True),
    to_attr='featured_items'
))

现在您可以遍历每个类别,然后遍历此预取。您不需要创建单独featured_items的查询集

for category in categories:
    for featured_item in category.featured_items:
        ...

您可以将此模式应用于您的模板


推荐阅读