电子商务产品的架构设计

时间:2019-09-29 01:15:07

标签: python django django-models database-design

我正在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

我的问题是,当我研究可扩展的电子商务产品设计(在更好的表关系和涵盖电子商务的大多数因素方面可扩展)时,我看到了各种表 ProductVariantProductVariantImageProductOptions等。因此,我对这些术语感到困惑。谁能通过示例帮助我使我理解这一点,以及如何在models.py中调整这些表?

这是链接

https://i.imgur.com/qGDBz29.png

1 个答案:

答案 0 :(得分:0)

我认为您只是想了解这些术语以及它们之间的关系,对吗?并且一旦理解,您就可以决定如何调整架构和模型。

ProductVariant :产品的“版本”。从电子商务的角度来看,这可能意味着某些东西不完全适合 Attribute AttributeValue 模型。例如,产品可以具有变体:

  • 大小
  • 原籍国
  • 语言
  • 只有男人,只有女人,男女通用
  • 不同的价格点(高端与低端,公共与私人)

我认为您可以在没有 ProductVariant 模型的情况下进行操作,而只需使用属性即可使事情正常进行。使用 ProductVariant 作为对已存在的 Product 的引用(Product.id的外键约束)可能是有意义的。参见herehere

ProductVariantImage ProductImage 的版本。

ProductOptions :产品的选项。您可以只使用属性。该表/模型似乎与 Attributes AttributeValues 所拥有的没什么不同。