我正在尝试为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。我把这个错了吗?
答案 0 :(得分:1)
您需要将kwarg sitenum传递给表单的所有实例,当请求为GET时,您无需这样做。我还将所有kwargs.pop()移到超级调用上方,以确保它与超级期望的kwargs不冲突。