首页 > 解决方案 > 缺少 ModelForm 额外字段

问题描述

我有以下结构:

class ModelA(models.Model):
    # ...

class ModelB(models.Model):
    modela = models.ForeignKey(ModelA)
    # ...

和一个表格ModelA: ModelAForm。默认情况下,for的字段modelb_set不存在,因为它是反向关系,所以我尝试将其添加到表单中:

class ModelAForm(forms.ModelForm):
    modelb_set = forms.SelectMultiple()

    class Meta:
        model = ModelA
        exclude = []

    def __init___(self, *args, **kwargs):
        # ...
        self.fields['modelb_set']  # this throws KeyError

当我在表单中明确声明时,为什么KeyError在尝试访问该字段时会抛出异常?

标签: django

解决方案


SelectMultiple - 像 Select 等 - 是一个小部件,而不是一个字段。您需要在此处使用实际字段。合适的使用可能是ModelMultipleChoiceField,它需要一个查询集。

请注意,您还需要添加一些自定义保存逻辑 - Django 不知道如何处理该字段。


推荐阅读