python - Django查询列表到模板 - 按类别显示项目
问题描述
我正在尝试创建一个数组以传递给模板页面,该页面应根据其类别对我的项目进行分组。
我不知道如何在 Django 中使用单个查询来做到这一点,所以我想定义一个函数,它应该得到类似于我想显示的结果的数组
我的目标显示
Title: Category_A
|
|_Menu_item_1_in_cat_A
|_option_1_of_menu_item_1
|_option_2_of_menu_item_1
|_extra_1_of_menu_item_1
|
|_Menu_item_2_in_cat_A
|_option_1_of_menu_item_2
Title: Category_B
|
|_Menu_item_3_in_cat_B
|_option_1_of_menu_item_3
|_option_2_of_menu_item_3
|_extra_1_of_menu_item_3
我的功能不起作用...这是结果,但是有要显示的项目...
[{'category': 'Category A', 'items': {}, 'options': {}, 'extras': {}}, {'category': 'Category B', 'items': {}, 'options': {}, 'extras': {}}]
模型.py
class Owner
...
def get_menu_list(self):
menu_list = []
# defining the categories
categories = (
Menu.objects.filter(owner=self.id)
.order_by("category")
.values("category")
.distinct()
)
for category in categories:
# create main group
details = {}
details["category"] = category["category"]
# select the items present in the category
items_list = []
options_list = []
extras_list = []
for item in Menu.objects.filter(owner=self.id, category=category)
items_list.append(item)
# add options and extra to the category
for item in MenuOptionItem.objects.get(menu=item.id)):
options_list.append(option)
for extra in MenuExtraItem.objects.get(menu=item.id)):
extras_list.append(extra)
details["items"] = items_list
details["options"] = options_list
details["extras"] = extrass_list
menu_list.append(details)
return menu_list
class Menu(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
menu_title = models.CharField(max_length=500, blank=False)
short_description = models.CharField(max_length=500, blank=False)
image = models.ImageField(upload_to="menu_images/", blank=False)
price = models.DecimalField(max_digits=14, decimal_places=2, default=0)
category = models.CharField(max_length=500, blank=True)
class MenuOptionItem(models.Model):
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
price = models.DecimalField(max_digits=14, decimal_places=2, blank=True)
desc = models.CharField(max_length=100, blank=True)
class MenuExtraItem(models.Model):
menu = models.ForeignKey(Menu, on_delete=models.CASCADE)
price = models.DecimalField(max_digits=14, decimal_places=2, blank=True)
desc = models.CharField(max_length=100, blank=True)
视图.py
restaurant = Owner.objects.get(id=owner_id)
return render(
request,
"detail_page.html",
{
"restaurant": owner,
},
)
detail_page.html
{% for category, items in restaurant.get_menu_list %}
...
{% for item in items %}
{{ item.name }}
{% for option in item.options %}
{{ option.name }}
{% endfor %}
{% for extra in item.extras %}
{{ extra.name }}
{% endfor %}
...
{% endfor %}
...
{% endfor %}
感谢您的任何帮助!
解决方案
所以我发现我的功能出了什么问题
# select the items present in the category
details["items"] = Menu.objects.filter(
restaurant=self.id, category=category["category"]
)
for item in Menu.objects.filter(
restaurant=self.id, category=category["category"]
):
details["options"] = MenuOptionItem.objects.filter(menu=item.id)
details["ingredients"] = MealExtraItem.objects.filter(menu=item.id)
推荐阅读
- ios - UIPageViewController 以编程方式快速 4
- java - 如何在 Openshift 上部署 Spring Boot + gradle 服务
- svn - 尝试在新工作区中从 SVN 导入项目
- android - 活动恢复后,Android MediaPlayer 类抛出 java.lang.IllegalStateException
- c# - 为什么在 ASP.net 页面上未声明实体框架时会调用它?
- msbuild - NuGet 与 MSBuild 试图在 VS IDE 文件夹中找到 package.config
- rest - 树结构的 REST API 设计指南
- python - 最近邻向量化
- docker - 在 kuberentes 集群中构建 docker 镜像
- php - 将 XML 提要拆分为两个不同的 PHP 文件