缺少自定义ID字段时的MultiValueDictKeyError

时间:2014-07-23 12:27:16

标签: django django-forms django-admin django-views

当我在NestedStackedInline中定义字段集或字段时,我在Django 1.6中得到一个MultiValueDictKeyError。在那里,我有一个自定义ID作为CharField,并希望隐藏该字段。但是,当我通过exclude =(' id',)来定义没有它的字段或只是使它成为只读时,我得到一个MultiValueDictKeyError。

这是我的代码:

class MaterialInline(NestedStackedInline):
    fieldsets = ('name', 'amount', 'date') 
    #without custom id I get that error(id=models.Charfield(primary_key=True))
    model = Material
    extra = 1
    form = autocomplete_light.modelform_factory(Material)

class ResearchAdmin(NestedModelAdmin):
    inlines = [MaterialInline, ]
    fields =('id','subject', 'topic')

错误:

 Exception Type:    MultiValueDictKeyError
 Exception Value:   "u'material_set-0-id'"
 Exception Location:    /usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py in __getitem__, line 301
...
/home/administrator/src/django-nested-inlines/nested_inlines/admin.py in change_view

269. self.add_nested_inline_formsets(request, inline, formset)

/home/administrator/src/django-nested-inlines/nested_inlines/admin.py in add_nested_inline_formsets

65. for form in formset.forms:

有谁知道这个问题? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题。原来我只需要在模型中使该字段不可编辑。请注意这里的最后一个参数:

class Material(models.Model):
    uuid = models.CharField(primary_key=True, max_length=128, editable=False)

答案 1 :(得分:0)

尝试在id字段上设置HiddenInput小部件。因此,为管理员定义一个模型表单:

class MaterialForm(forms.ModelForm):
    id = forms.CharField(max_length=30, widget=HiddenInput, required=False)

    class Meta:
        model = Material

然后替换

    form = autocomplete_light.modelform_factory(Material)
<{1>}中的

MaterialInline

显然,要使用自动完成功能,需要做更多的工作。