【发布时间】:2020-05-21 08:42:29
【问题描述】:
我有一个模型:
class Product(models.Model):
slug = models.SlugField(unique=True)
image = models.ImageField(upload_to='media')
title = models.CharField(max_length=150)
description = models.TextField()
short_description = models.CharField(max_length=300)
price = models.DecimalField(max_digits=5, decimal_places=2)
discount_price = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
stock_quantity = models.PositiveIntegerField(default=10)
in_stock = models.BooleanField(default=True)
on_sale = models.BooleanField(default=False)
date_added = models.DateTimeField(auto_now_add=True, blank=True)
main_category = models.CharField(default='FW', choices=CATEGORY_CHOICES, max_length=2)
additional_category = models.CharField(choices=CATEGORY_CHOICES, max_length=2, blank=True, null=True)
brand = models.CharField(choices=CATEGORY_CHOICES, max_length=2, blank=True, null=True)
size = models.CharField(max_length=2, choices=CATEGORY_CHOICES, default='M', blank=True, null=True)
def __str__(self):
return self.title
在此模型中将包含各种类型的产品,例如衣服和书籍。 这些将由模型中的 main_category 和 additional_category 字段定义。 如果输入数据库的产品是一件衣服,我将输入尺寸和品牌的值。对于书籍,这些显然是空白的。
但是,如果产品是一件衣服,我有女装、男装和儿童服装。我将能够通过在 main_category 字段中选择“女性”来定义这些。
在我的模板中,我想动态显示一个显示所有衣服的页面,一个显示“女性服装”的页面,另一个显示“男性服装”等的页面。然后是一个显示所有书籍的页面,基于 main_category 和 additional_category 的青少年书籍、成人书籍等。
如果我输入一个产品,并且主要类别是“女性”,而附加类别是“加大码”,我想要一个模板来动态显示在 main_category 或附加类别中选择了“女性”的所有产品.还有一个显示所有加大码服装的模板,其中 main_category OR additional_category 是“加大码”。
我在编写视图时遇到了麻烦。我是否需要为女性服装、加大码服装、儿童服装、书籍、成人书籍、青少年书籍等提供视图。或者我可以只编写一个视图,将正确的数据输出到多个模板。基本上,每个模板需要一个视图吗?
我已阅读:
https://docs.djangoproject.com/en/3.0/topics/class-based-views/generic-display/
并查看了 get_context_data。我可以定义多个 get_context_data 函数来为不同的模板返回不同的过滤信息,如果可以,我如何区分它们?
我目前正在学习,正在使用 Django 建立一个虚拟在线商店以尽可能多地学习,但发现这特别复杂?
谢谢
【问题讨论】:
标签: django django-models django-templates django-views django-context