【发布时间】:2020-06-08 14:18:18
【问题描述】:
我是 Django 初学者,遇到了一个我不确定如何解决的问题。 我正在建立电子商务网站来练习。我有两个主要模型:产品,项目。 产品具有价值的地方 - 内存、颜色、代码、可用性等。项目是多个产品的包装器,因此它是用户对包装成一个产品的视图。
即:
产品:手机 128GB 白色;手机64GB黑色;...
项目:手机(同时保留 128GB 白色和 64GB 黑色“指针”)
所以作为我的 ItemDetailView(DetailView) 我向用户展示一个项目,当然可以显示所有可能的颜色和内存变体。但我无法弄清楚的是如何在用户选择之后,例如通过单选按钮,在 template.html 页面中,颜色和内存将选择的变体发送到后端(或 views.py,如果我正确理解概念)。
我的想法是创建模型“ChosenProduct”,其中包含“user”、“color”、“memory”、“item”等列。因此,在选择了颜色和内存之后,理想情况下,我可以创建新对象,保存所有四个参数。有了它,我可以向用户展示它的可用性,然后单击“添加到购物车”btn 将其添加到购物车......
但问题是,我不知道如何轻松地将用户从 template.html 中选择的那些参数(颜色、大小)传递给处理此问题的实际函数。
models.py
#presenting actual Product for sale
class Product(models.Model):
code = models.CharField(max_length=30)
colorCode = models.CharField(max_length=20, blank=True, null=True)
rgb = models.CharField(max_length=20, blank=True, null=True)
sizeCode = models.CharField(max_length=20, blank=True, null=True)
avalibility = models.IntegerField(default=0)
def __str__(self):
return self.code
#wraps multiple Products
class Item(models.Model):
title = models.CharField(max_length=100)
description = models.CharField(max_length=10000)
price_inclVat = models.FloatField()
price_noVat = models.FloatField()
price_discount_inclVat = models.FloatField(blank=True, null=True)
price_discount_notVat = models.FloatField(blank=True, null=True)
products = models.ManyToManyField(Product)
slug = models.SlugField()
label = models.CharField(choices=LABEL_CHOICES,
max_length=1, null=True, blank=True)
#my idea of presenting chosen variants in user's relation
class ChosenProduct(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
color = models.CharField(max_length=20, blank=True)
size = models.CharField(max_length=20, blank=True)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
def __str__(self):
return self.item.title
views.py (DetailView)
class ItemDetailView(DetailView):
model = Item
template_name = "product.html"
能否请您指出正确的方向以及如何使用 Django 处理此操作?我发现多个线程讨论 request.GET 但我不想通过 URL 传递参数(因为这是我理解的唯一选项)。
谢谢!
【问题讨论】:
标签: python django django-models django-views django-templates