Все,
Я упускаю что-то фундаментальное в базовой модели Django ForeingKeys против ManyToManyFields.
Предположим, я создаю приложение об автомобилях.У меня могут быть следующие классы:
class Car(models.Model):
carName = models.CharField()
class Manufacturer(models.Model):
manufacturerName = models.CharField()
class Wheel(models.Model):
radius = models.IntegerField()
Пока все хорошо.Теперь есть некоторые отношения между этими классами.Автомобиль имеет производителя и имеет (четыре) шины.Концептуально разница есть.Производитель связан через «агрегацию»;производитель может быть связан с несколькими автомобилями;удаление экземпляра Car также не должно приводить к удалению производителя этого автомобиля.Колеса связаны через «состав»;каждые четыре колеса, связанные с автомобилем, связаны с этим и только этим автомобилем;удалите автомобиль, и колеса должны быть также удалены.
Итак, интуитивно, это означает, что я должен сделать следующее:
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 предоставит пользователю все поля для Car ("carName"), а не для Wheel ("radius").
Просто наберите этот вопросделает меня смущеннымКто-нибудь может пролить некоторый свет на то, как я могу создать форму, в которой есть все поля автомобиля, а затем все поля производителя, а затем все поля колеса.
Спасибо