Django缺少Formfield

时间:2018-07-19 19:36:07

标签: django django-forms django-templates django-views

我正在尝试在Django中使用表单集,但遇到了我不理解的问题。我得到的错误是

 [{'id': ['This field is required.']}, {}]

这里是背景:在models.py中,我有

class Ledighet(models.Model):
    person = models.ForeignKey(Personal,on_delete=models.CASCADE)
    start_date = models.DateField()
    end_date = models.DateField()

在forms.py中,我只有一行

LedighetFormset =  inlineformset_factory(Personal,Ledighet,fields =  ('start_date', 'end_date'),extra=1)

在views.py中,我有

def rapportera_ledighet(request,person_id):
     person = get_object_or_404(Personal,id = person_id)

     if request.method == 'POST':
          formset = LedighetFormset(request.POST,instance=person)
          if formset.is_valid():
               formset.save()

     formset = LedighetFormset(instance=person)
     context={'person' : person, 'formset' : formset}
     return render(request, 'schema/rapportera_ledighet.html', context)

,并且html文件中的关键代码是

 <form method="post">{% csrf_token %}
      {{ formset.management_form }}
      <table class="table table-striped">
      {% for f in formset %}
       <tr><td>{{ f.start_date }}</td><td>{{ f.end_date}}</td><td>{{ f.fraction }}</td><td>{{ f.typ }}</td></tr>
       {% endfor %}
       </table>
       <input type="submit" value="Updatera" />
 </form>

表单看起来像我想要的样子,但是出现上面的错误。

我在做什么错?

1 个答案:

答案 0 :(得分:0)

inlineformset_factory

使用modelformset_factory() 期望使用ModelForm

将您的Ledighet表单更改为模型表单

class Ledighet(ModelForm):
  ...

它应该可以工作..

您还可以尝试将id字段添加到当前表单类中

请参阅此处获取模型表格 (https://docs.djangoproject.com/en/2.0/topics/forms/modelforms/