我在通过表单提交数据后尝试更改/添加ForeignKey字段的pk。 表单不要求ForeignKey,这应该通过Slug来完成:
Model.py
class Verantwortlicher(models.Model):
masznahme = models.ForeignKey(Masznahmen, verbose_name='Maßnahme')
verantwortlicher = models.CharField('Verantwortlicher Mitarbeiter',
max_length=30)
faelligkeit = models.DateField('Fälligkeit')
def __str__(self):
return self.verantwortlicher
forms.py
class VerantwortlicherForm(forms.ModelForm):
masznahme = forms.ModelChoiceField(queryset=Masznahmen.objects.all() ,
label='Maßnahme',
required=False,
)
def __init__(self, *args, **kwargs):
super(VerantwortlicherForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'id-Verantwortlicher'
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-md-3'
self.helper.field_class = 'col-md-4'
self.helper.form_method = 'post'
#self.helper.form_action = 'verantwortlicher'
self.helper.layout = Layout(
Fieldset(
'',
'verantwortlicher',
'faelligkeit',
),
FormActions(
Submit('submit', 'Datensatz hinzufügen', css_class="button white")
)
)
class Meta:
model = Verantwortlicher
View.py
def verantwortlicher(request, slug):
context = RequestContext(request)
if request.method == "POST":
form = VerantwortlicherForm(request.POST)
if form.is_valid():
form.save(commit=False)
masznahme = Masznahmen.objects.get(slug=slug)
form.masznahme = masznahme.pk
form.save(commit=True)
return redirect('aktionsplan')
else:
print(form.errors)
else:
form = VerantwortlicherForm()
return render_to_response('verbrauchererfassung/verantwortlicher.html',
{'form': form},
context,
)
在Return中我得到一个valueError:
异常类型:ValueError 例外值:
不能分配无:" Verantwortlicher.masznahme"不允许空值。
我的推理错误在哪里?
答案 0 :(得分:2)
我想你应该这样做:
vwortlicher = form.save(commit=False)
masznahme = Masznahmen.objects.get(slug=slug)
vwortlicher.masznahme = masznahme.pk
vwortlicher.save()
从完整的堆栈跟踪中我们发现实际错误位于if form.is_valid()
行
罪魁祸首碰巧在forms.py中的形式类元中缺少exclude
来自masznahme
字段小部件的表单验证预期输入不存在