Как добавить поле сквозной модели в форму Django
Для моего проекта Django я пытаюсь создать единственную форму, которая позволяет мне добавить строку в мою модель Pipeline и связать эту строку с моделью Process через модель PipelineProcess. Это довольно просто сделать с помощью ModelForms, если бы модель PipelineProcess не имела дополнительного поля (фаза). Мне нужно иметь возможность просматривать и добавлять/редактировать поле PipelineProcess.phase в одной и той же форме. Обратите внимание, что PipelineProcess является "сквозной моделью" модели Pipeline и Process.
models.py
class Pipeline(models.Model):
name = models.CharField(max_length=100)
sector = models.CharField(max_length=100, blank=True, null=True)
process = models.ManyToManyField(Process, through='PipelineProcess') ### NOTE THE USAGE OF THE THROUGH MODEL HERE
class Meta:
managed = True
db_table = 'pipeline'
class Process(models.Model):
name = models.CharField(max_length=100)
class Meta:
managed = True
db_table = 'process'
class PipelineProcess(models.Model):
pipeline = models.ForeignKey(Pipeline, models.DO_NOTHING, blank=True, null=False)
process = models.ForeignKey(Process, models.DO_NOTHING, blank=True, null=False)
phase = models.CharField(max_length=100) ### THIS FIELD I AM UNABLE TO ACCESS THROUGH A FORM
class Meta:
managed = True
db_table = 'pipeline_process'
forms.py
class PipelineForm(ModelForm):
class Meta:
model = Pipeline
fields = ['name', 'sector', 'phase']
Эта форма выдает следующую ошибку, которая имеет смысл:
django.core.exceptions.FieldError: Unknown field(s) (phase) specified for Pipeline
Я пробовал искать примеры других людей, но ни один из них мне не пригодился. Большинство из них были слишком сложными для меня, чтобы я мог реализовать их в своем собственном проекте. Я довольно новичок в Django и веб-разработке в целом. Любая помощь будет очень признательна.
class PipelineForm(Forms.ModelForm):
class Meta:
model = Pipeline
fields = '__all__'
поле "phase", которое вы используете в вашем forms.py, не является полем класса "Pipeline". и также вы используете "ModelForms" вместо "Forms.ModelForm"