【发布时间】:2017-11-05 19:40:53
【问题描述】:
我正在尝试模仿 eBay 的多列表功能。基本上,eBay 允许用户指定他们选择的两种变体,例如size and color。每个变体都会有不同的数据,例如:
Color: red, green
Size: 12, 9
然后它会变得有点混乱,例如:
quantity for color red, size 12: 15
quantity for color red, size 9: 12
quantity for color green, size 12: 20
quantity for color green, size 9: 59
用户必须指定每种变体混合的数量,第一个变体优先。
为了使事情复杂化,名称和颜色仅是示例。它们可以是不同的属性。
如何在数据库级别应用它?目前我只是在制作一个这样的列表:
[color blue,size = 12,Quantity = 24,Price = 299,size = 23,Quantity = 43,Price = 298]
计划将列表存储为字段中的字符串,并使用 JSON 重新构建它。
问题是,每个请求都需要进行不必要的处理。例如,如果数量减少,那么我不能只编辑一个字段,我必须使用标志从列表中找到正确的数量(不必要的处理),并对列表进行适当的更改,然后再次存储。
寻找替代方法?我无法为变体创建字段,因为它们是由用户指定的。
寻找方向。
我当前的表格如下:
class Auction(models.Model):
auction_id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=50)
description = models.TextField(validators=[MaxLengthValidator(1000)])
price = models.PositiveSmallIntegerField(default = 0)
bid = models.PositiveSmallIntegerField(default = 0)
image = models.ImageField(upload_to = 'img/', default = 'img/None/no-img.jpg')
......
# stores multi listing list/dict
multi_listing = models.CharField(max_length=200)
flag = models.BooleanField(default=False)
slug = models.SlugField(unique=True, default = (randint(0,1000000)))
def __unicode__(self):
return self.name
【问题讨论】:
-
我会使用一个属性列来分组,这是一个表的外键,其中包含这些类别的元数据,以及价值、价格、库存和排序顺序的列。然后我会使用与项目的 n m-n-relation 并强制执行最多两个。
-
为什么不使用 Django 模型来处理呢?因此更新/查询应该更容易。具有“颜色”字段、“尺寸”字段、“价格”字段和“数量”字段的模型。
-
@thom 因为颜色和大小是一个变化,这些变化不是固定的,而是用户指定的。用户可以指定材质和颜色,而不是颜色和尺寸。
-
您可以拥有一个模型,每个用户只有一个实例,并将其链接到具有您的产品详细信息的更通用模型,它可以工作吗?
-
@Thom 我可以创建一个包含所有静态字段的表,例如
price和quantity(我们称表为stock)。但不知道在哪里存储非静态字段,因此无法确定variation1和variation2。每个变体由用户命名,并且每个变体可能包含多个输入。所以variation1可以命名为color,而variation2可以命名为material。一件红色和皮革材质的项目将连接到stock表,该表将包含其quantity和price。我将尝试绘制表格以更好地描述问题。
标签: python django database database-design django-models