将kwargs传递给ModelForm时发生KeyError

时间:2019-12-05 16:45:34

标签: python django django-models django-forms django-views

我正在尝试为ModelForm中的M2M字段创建一个自定义字段。 ConnectedTo是多对多字段。下面的代码:

观看次数:

def addPartForm_Create(request, site, subtype):
    siteselected = site
    sitenumber = str(site)
    print(sitenumber)
    subtypeselected = Subtype.objects.get(SubtypeID = subtype)
    if request.method == 'POST':
        form = addPartForm(request.POST, sitenum=sitenumber)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.SiteID = Site.objects.get(SiteID = siteselected)
            obj.Subtype = subtypeselected
            obj.save()
            form.save_m2m()
            return redirect('/sites/'+str(site))
    else:
        form = addPartForm()
    return render(request, 'myproj/addPart.html', {'form': form, 'SiteNo': Site.objects.get(SiteID = siteselected).SiteID, 'subtype': subtypeselected})

表格:

class addPartForm(forms.ModelForm):

class Meta:
    model = Part
    fields = ('Comment', 'Location', 'ConnectedTo', 'BatchNo', 'Manufacturer', 'Length', 'InspectionPeriod')
    labels = {"BatchNo": "Batch Number", "InspectionPeriod": "Inspection Period"}


def __init__(self, *args, **kwargs):
    super(addPartForm, self).__init__(*args, **kwargs)
    sitenum = kwargs.pop('sitenum')
    self.fields["ConnectedTo"].widget = forms.CheckboxSelectMultiple()
    self.fields["ConnectedTo"].queryset = Part.objects.filter(SiteID = sitenum)

当我尝试将viewnum从视图传递到表单时,出现KeyError。我知道我可以将默认值设置为None,但我不希望它不显示任何值。我需要始终在此处发送一个sitenum。我把这个错了吗?

1 个答案:

答案 0 :(得分:1)

您需要将kwarg sitenum传递给表单的所有实例,当请求为GET时,您无需这样做。我还将所有kwargs.pop()移到超级调用上方,以确保它与超级期望的kwargs不冲突。

相关问题