Django - 使用formsets

时间:2015-07-22 10:50:12

标签: python django

我完全不确定我哪里出错了,我有这个工作,现在不是。我知道我很亲密,但我是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块时,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

问题似乎源于视图中规定的字段与模板中的字段之间的差异。如果一个字段在视图中,它必须在模板中,否则表单将不会保存。