0

製品モデルをどのようにモデル化して、そのバリアント パーツに基づいて製品のバリアントを自動作成する (そして管理アプリもそれを理解する) のだろうかと思います。

私の製品には次のものがあります。

  • サイズ

将来的にはさらに多くの機能が追加される可能性があります。

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 のロジックに実際には準拠していないことです。

4

2 に答える 2