Я сталкиваюсь с проблемой при использовании ModelForm
, и я хочу знать, схожу ли я с ума или нет, прежде чем я go отключусь, чтобы сделать несколько сложных обходных путей
Использование Случай :
У меня есть следующие определения модели:
class Setting(models.Model):
"""Manufacturing settings - can be shared among materials to be manufactured"""
...
class Material(models.Model):
"""Specific record for a material that is manufactured"""
...
setting = models.ForeignKey('Setting', on_delete=models.SET_NULL, related_name='materials')
class ManufacturingRun(models.Model):
"""An instance of a manufacturing run"""
material = models.ForeignKey('Material', on_delete=models.SET_NULL, related_name='manufacturing_runs')
В этом приложении данные в модели материала поступают из внешнего источника, и мы не предоставляем пользователям Возможность редактировать эти записи. Однако поле setting_id
является , а не , которое заполняется как часть данных, полученных из этого внешнего источника.
В основном мне нужно, чтобы мои пользователи определяли экземпляры Setting
и могли назначать каждую запись нескольким экземплярам материала. Для этого я определяю форму Setting
следующим образом:
class SettingForm(forms.ModelForm):
class Meta:
model = Setting
fields = [
...
'materials'
]
Проблема: Все выглядит нормально, пока я не получаю доступ к View
для создания нового Setting
, тем самым вызывая создание объекта SettingForm
. Сервер возвращает
django.core.exceptions.FieldError: Unknown field(s) (materials) specified for Setting
Я настолько привык к гибкости ORM Django, что я несколько сбит с толку. Я думаю, я не понимаю, почему это не может быть обработано так же, как отношения M2M в формах. Несмотря на то, что поле _id
не существует ни в одной из моделей по обе стороны от поля M2M, мы можем просто использовать связанные имена при определении форм.
Я иногда создавал очень сложные обходные пути, прежде чем находил в ORM несколько смехотворно простых методов для достижения аналогичных результатов, поэтому я хотел обратиться к ним, прежде чем приступить к кодированию какого-то хрупкого и сложного беспорядка, к которому я буду бояться прикасаться. 6 месяцев.