全て、
Django の ForeingKeys と ManyToManyFields の基礎となるモデルについて、何か基本的なことが欠けています。
車に関するアプリケーションを構築しているとします。次のクラスがあるかもしれません:
class Car(models.Model):
carName = models.CharField()
class Manufacturer(models.Model):
manufacturerName = models.CharField()
class Wheel(models.Model):
radius = models.IntegerField()
ここまでは順調ですね。現在、これらのクラス間にいくつかの関係があります。車にはメーカーがあり、タイヤが (4 つ) あります。ただし、概念的には違いがあります。メーカーは「集約」によって関連付けられます。メーカーは複数の車に関連付けることができます。Car インスタンスを削除しても、その車のメーカーも削除されるべきではありません。ホイールは「構成」によって関連付けられています。車に関連付けられている 4 つの車輪はすべて、その車のみに関連付けられています。車を削除すると、車輪も削除する必要があります。
したがって、直感的には、次のことを行う必要があることを意味します。
class Car(models.Model):
carName = models.CharField()
manufacturer = models.ManyToManyField("Manufacturer")
wheels = models.ForeignKey("Wheel")
最終的には、inlineformset_factories を使用して、ユーザーが車、そのメーカー、ホイールに関する詳細をすべて同時に入力できるようにしたいと考えています。このようなもの:
class CarForm(ModelForm):
class Meta:
model = Car
class ManufacturerForm(ModelForm):
class Meta:
model = Manufacturer
class WheelForm(ModelForm):
class Meta:
model = Wheel
Manufacturer_formset = inlineformset_factory(Car,Manufacturer,formset=ManufacturerForm)
Wheel_formset = inlineformset_factory(Car,Wheel,formset=WheelForm)
しかし、私が見つけたドキュメントのほとんどは、ForiegnKey が Wheel から Car に移動する必要があることを示唆しています。Wheel_formset は、Wheel (「radius」) ではなく、Car (「carName」) のすべてのフィールドをユーザーに提示するため、これは逆に思えます。
この質問を入力するだけで、私は混乱します。すべての車のフィールド、すべてのメーカーのフィールド、すべてのホイールのフィールドを持つフォームを作成する方法について、誰かが光を当てることができますか?
ありがとう