python - 在 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
解决方案
您可以使用prefetch_related
和Prefetch
自定义查询来获取每个类别的所有相关文章。
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:
...
您可以将此模式应用于您的模板
推荐阅读
- python - 在数据框中分隔 2 个数组
- python - 安装的 OpenCV 无法在 PyCharms Python 3.8 项目上运行
- postgresql - 如何使用 postgresql 角色连接数据库?
- python - 如何使用 cmd 运行用 Spider 编写的 python 程序
- windows - 如何从命令行在目标字段中执行带有空格的快捷方式?
- javascript - 在 NodeJS 中循环后获取新数组值时遇到问题
- angular - Angular 8 Resolver 不工作:没有 Resolver 的提供者
- javascript - 循环对象数组返回一个数组
- sql-server - 如何正确截断 ETL 管道中的临时表?
- angularjs - 如何在 ng-repeat 中访问子范围