提交表单后,为ForeignKey字段添加pk

时间:2014-10-16 08:28:09

标签: django django-models django-views

我在通过表单提交数据后尝试更改/添加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"不允许空值。

我的推理错误在哪里?

1 个答案:

答案 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字段小部件的表单验证预期输入不存在