製品とバリエーションを含む単純な e コマース サイトがあります。
各バリエーションには間違いなく異なる重みがあり、各重みには量があります。
各バリエーションは異なる重みを持つことができ、各重みには数量があるため、Variation への ForeignKey 関係を持つ Weight モデルを実装しました。
class Weight(models.Model):
variation = models.ForeignKey(Variation)
size = models.DecimalField(decimal_places=3, max_digits=8,
validators=[MinValueValidator(Decimal('0.10'))])
quantity = models.PositiveIntegerField(null=True, blank=True, help_text="Select Quantity for this size")
重量をインラインで追加し、バリエーションに複数の重量値と数量を追加できます。こちらをご覧くださいhttp://imgur.com/XLM6sQJ
これは、重量ごとにバリエーションを作成することで可能になると思われるかもしれませんが、各製品の重量が異なることは明らかであるため、重量ごとにバリエーションを作成する必要はありません。
今私が直面している問題は、各バリエーションの重量が異なるため、たとえば、バリエーションの重量が 1 ポンド、2 ポンド、3 ポンドになる可能性があることです。これらはそれぞれ、バリエーションごとに新しいウェイト オブジェクトを作成します。これは、別のバリエーションにも 1 ポンド、2 ポンド、3 ポンドの重量がある場合、新しいオブジェクトが作成され、既存のものは再利用されないことを意味します。これにより、多くの重複する重み値を持つ巨大なデータベース テーブルが作成されます。どの製品にも必要な重量と数量の値は限られているため (重量 = 1 ポンドから 100 ポンド、数量 = 1 から 100)、理想的にはこれらを再利用する必要があるため、これは問題です。
これを避けるために、ManyToMany フィールドを持つ Weight モデルを Variation に設定し、選択した各 Weight の数量をドロップダウンにすることを考えています。これにより、重量と数量の両方の値を保存し、各製品が各インスタンスで同じ値を使用できるようになります。
私が抱えている問題は次のとおり
です。1.これは正しいアプローチですか?
2.そうでない場合、これを行うための最良のアプローチは何ですか?
3.これが正しいアプローチである場合、これを行う方法は?
4.これが正しいアプローチである場合、各重量にも数量が必要なため、管理サイトでこれを表示するにはどうすればよいですか (これを行う方法がわかりません)。
5.これを達成するためのより良い方法はありますか?