我想知道如何对我的 Products 模型进行建模以根据产品的变体部分自动创建(并且管理应用程序也会理解它)产品的变体。
我的产品有;
- 颜色
- 尺寸
并且将来可能会获得更多功能。
我将如何为我的产品类建模以生成产品的所有变体?
假设我会在 ColorsRed
Blue
Green
和 Sizes中创建一个新产品XS
S
M
L
XL
。
class Product(models.Model):
name = models.CharField(max_length=200)
class Color(models.Model):
product = models.ForeignKey(Product)
name = models.CharField(max_length=200)
class Size(models.Model):
product = models.ForeignKey(Product)
name = models.CharField(max_length=200)
class FutureVariant(models.Model):
product = models.ForeignKey(Product)
name = models.CharField(max_length=200)
# etc.
现在,当我需要一种智能方法时,我会为该产品自动创建所有颜色尺寸-[FUTURE VARIANT]。
所以我会告诉 Django;
- 创建新产品
- 在颜色
Red
Blue
Green
- 在尺寸
XS
S
M
L
XL
- 在颜色
Product 类将生成 Products_product 表中所有可能组合的产品。
我几乎可以肯定这有设计缺陷。但我只是好奇如何将这个逻辑放在 ORM 中,而不是编写奇怪的过程代码,这可能违反 DRY 原则。
在数据库逻辑中,我会想到这样的事情;
PRODUCTS
- id
- name
PRODUCTS_VARIANTS_COLORS
- id
- name
- html_code
PRODUCTS_VARIANTS_SIZES
- id
- name
PRODUCTS_VARIANTS_TABLES
- table_name
- table_id
PRODUCTS_VARIANTS
- product_id
- variant_table
- variant_id
这样我就可以制作无穷无尽的变体表,只要我将它们注册到我的PRODUCTS_VARIANTS_TABLES
并将它们的名称存储为相关。PRODUCTS_VARIANTS
将包含产品的所有变体,包括它们的组合。我还打算有一个选择阶段,用户可以在其中选择(在 HTML 复选框列表中)它想要和不想要的变体。
问题(我认为)是这并不真正符合 ORM 中的逻辑。