我完全不确定我哪里出错了,我有这个工作,现在不是。我知道我很亲密,但我是Django的新手,我无法理解这一点。
我正在尝试创建一个允许用户编辑数据库中的数据的表单集。这就是我目前所拥有的:
models.py
class Section(models.Model):
section_document_type = models.ManyToManyField(DocumentType,
verbose_name="Document Type",
blank=True)
name = models.CharField("Section Name",
max_length=240,
unique=True)
content = models.TextField()
required = models.BooleanField("mandatory section?",
help_text="Please tick this box if this \
section is mandatory.")
def __unicode__(self):
return self.name
views.py
@login_required
def edit_lld(request, slug):
document = get_object_or_404(Document, slug=slug)
SectionFormSet = modelformset_factory(Section, fields=('content', 'name'))
formset = SectionFormSet(queryset=Section.objects.filter
(name__startswith=document.slug))
if request.method == 'POST':
formset = SectionFormSet(request.POST)
if formset.is_valid():
formset.save()
return render(request, 'lld/edit_lld.html', {'formset': formset})
else:
formset = SectionFormSet(queryset=Section.objects.filter
(name__startswith=document.slug))
return render(request, 'lld/edit_lld.html', {'formset': formset})
我想这与request.method == POST
部分有关。正如我所说,当我第一次这样做时,它工作正常,但现在不是。我觉得很亲密,但我错过了一些东西,我意识到我并不完全明白这是如何起作用的。
编辑:看起来错误实际上在我的模板中:
{% extends 'layouts/base.html' %}
{% block content %}
{% if error %}
{{ error }}
{% endif %}
<h1>Edit Document</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
<ul>
<li>
{{ form.content }}
</li>
</ul>
{% endfor %}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}
当我用{{ formset }}
替换上面的formset块时,它可以正常工作。
答案 0 :(得分:0)
问题似乎源于视图中规定的字段与模板中的字段之间的差异。如果一个字段在视图中,它必须在模板中,否则表单将不会保存。