製品モデルをどのようにモデル化して、そのバリアント パーツに基づいて製品のバリアントを自動作成する (そして管理アプリもそれを理解する) のだろうかと思います。
私の製品には次のものがあります。
- 色
- サイズ
将来的にはさらに多くの機能が追加される可能性があります。
Product クラスをモデル化して、Product のすべてのバリアントを生成するにはどうすればよいですか?
ColorsRed
Blue
Green
と Sizesで新しい Product を作成するとし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.
今、その製品のすべての color-size-[FUTURE VARIANT] を自動作成するスマートな方法が必要な場合。
だから私は Django に言います。
- 新しい製品を作成
- 色で
Red
Blue
Green
- サイズで
XS
S
M
L
XL
- 色で
そして、Product クラスは、products_product テーブル内のすべての可能な組み合わせで Products を生成します。
これには設計上の欠陥があるとほぼ確信しています。しかし、私はこのロジックを 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 のロジックに実際には準拠していないことです。