我正在django探索模型,在那里我试图为电子商务产品创建模型。我现在设计的架构是
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=80)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
total_stock = models.PositiveIntegerField(default=0)
def __str__(self):
return self.name
class Attribute(models.Model):
'''
attribute can be like color, material, size and many more
'''
name = models.CharField(max_length=80)
def __str__(self):
return self.name
class AttributeValue(models.Model):
'''
Values for the selected attribute like for size attr
the values can be Large, Medium, Small and etc
'''
name = models.CharField(max_length=100)
attribute = models.ForeignKey(Attribute, on_delete=models.CASCADE)
price = models.DecimalField(decimal_places=2, max_digits=10)
discount = models.DecimalField(decimal_places=2, max_digits=10)
stock = models.PositiveIntegerField(default=0)
def __str__(self):
return self.name
class ProductAttribute(models.Model):
'''
Associate Particular attribute to Particular product
'''
product = models.ForeignKey(Product, on_delete=models.CASCADE)
attribute = models.ForeignKey(Attribute, on_delete=models.CASCADE)
def __str__(self):
return self.product.name
class ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
image = models.ImageField(upload_to = 'pic_folder/')
def __str__(self):
return self.product.name
我的问题是,当我研究可扩展的电子商务产品设计(在更好的表关系和涵盖电子商务的大多数因素方面可扩展)时,我看到了各种表
ProductVariant
,ProductVariantImage
,ProductOptions
等。因此,我对这些术语感到困惑。谁能通过示例帮助我使我理解这一点,以及如何在models.py
中调整这些表?
这是链接
答案 0 :(得分:0)
我认为您只是想了解这些术语以及它们之间的关系,对吗?并且一旦理解,您就可以决定如何调整架构和模型。
ProductVariant :产品的“版本”。从电子商务的角度来看,这可能意味着某些东西不完全适合 Attribute 或 AttributeValue 模型。例如,产品可以具有变体:
我认为您可以在没有 ProductVariant 模型的情况下进行操作,而只需使用属性即可使事情正常进行。使用 ProductVariant 作为对已存在的 Product 的引用(Product.id的外键约束)可能是有意义的。参见here和here。
ProductVariantImage : ProductImage 的版本。
ProductOptions :产品的选项。您可以只使用属性。该表/模型似乎与 Attributes 和 AttributeValues 所拥有的没什么不同。