为什么我们不能在Django表单中使用ForeignKey关系的反面?

时间:2020-05-01 21:52:13

标签: django django-models django-forms

使用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个月内碰到的易碎而复杂的混乱之前,先尝试一下。

0 个答案:

没有答案