我正在尝试返回企业的类别列表,对于每个类别,我想列出与类别相关的所有项目。
我不是返回所有项目,而不是按类别返回,但我决定我希望它们按类别进行排序。这就是我尝试的(除其他尝试外(,我只是在将这些物品放入那里很难。这是我的最新尝试
在我的型号中,我有
Business(models.Model):
name = models.CharField(max_length=100)
address = models.CharField(max_length=100)
logo = models.CharField(max_length=300)
ItemCategory(models.Model):
name = models.CharField(max_length=50)
Item(models.Model):
name = models.CharField(max_length=100)
business = models.ForeignKey(Business)
category = models.ForeignKey(ItemCategory)
short_description = models.CharField(max_length=250)
在我的Views.py
中def business_profile(request, business_id):
items = Item.objects.filter(business_id = business_id).select_related('itemcategory')
return render(request, 'business_profile.html', {"items": items})
在我的模板中,我正在尝试
{% for itemcategory in items.itemcategory_set.all %}
{{ itemcategory.name }}
{% for item in itemcategory %}
{{ item.name }} <br>
{{ item.short_description }}
{% endfor %}
{% endfor %}
从我对其他问题的研究并阅读文档,我觉得这是正确的。但是,从我的结果中,我无法在模板中获得正确的输出。
- 这是正确的做法吗?还是我应该尝试首先使用 获得类别
categories = ItemCategory.objects.filter(business = business_id)
然后可能添加一个select_reced('item'(来处理类别的所有项目?
- 当我在模板中引用数据时,但是我的模型有2个单词(itemScategory( - 例如,当我向后方移动外键或在select_recelated(''(中使用模型时,我会使用item_category还是您只是简单地使用使用没有下划线的ItemCategory?
更新:我在以下评论中回答说明。
要按类别列出这些项目,我使用 @yusuf.oguntola的想法,最初与.get((获得业务,然后我创建了一个querySet来获取所有项目。我在Views.py中的功能包括
business = Business.objects.get(id = business_id)
items = business.item_set.all().order_by('category')
注意:business_id以URL模式传递
但是,关键更改在我的模板中。我发现此处的Django文档中的模板内置功能
我在模板中实现了它...
{% regroup items by category as category_list %}
<ul>
{% for category in category_list %}
<li>{{ category.grouper }}
<ul>
{% for item in category.list %}
<li>{{ item.name }}<br> {{ item.short_description }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
最重要的部分之一是您必须具有order_by((并将您要订购的字段参数放置 - 在我的情况下,类别。如果不包括其中,它将仅按时间顺序排列列出的项目,并重复您的字段实例。
-
items = Item.objects.filter(business_id = business_id)
是错误的。您应该说:项目= item.Objects.filter(business__id = business_id(#notice double dusterscore。
您也可能宁愿获得业务,只是说:
business.item_set.all() #This would retrieve all Item for the business.
select_related()
期望字段名称为一个参数。因此,请使用项目模型上存在的字段名称。喜欢:select_related('category')
吃饭在哪里?可能是您可以从那里开始。