使用ModelForm
时遇到了问题,我想知道自己是不是疯了,然后再进行一些复杂的解决方法
用例:
我有以下模型定义:
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')
在此应用程序中,Material模型中的数据来自外部来源,我们不向用户提供编辑这些记录的功能。但是,不是字段填充为setting_id
,作为从此外部源接收的数据的一部分。
基本上,我需要我的用户定义Setting
实例,并能够将每个记录分配给多个Material实例。为此,我定义了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
我已经习惯了Django ORM的灵活性,我对此有些困惑。我想我不明白为什么不能以M2M关系的形式来处理它。尽管_id
字段在M2M字段的任一侧都不存在,但在定义表单时我们可以使用相关的名称。
在ORM中找到一些荒谬的简单方法来获得相似的结果之前,我偶尔会构建非常复杂的变通方法,因此我想在我开始编码一些我会在6个月内碰到的易碎而复杂的混乱之前,先尝试一下。