我正在创建一个允许匿名输入数据的应用程序,并将我的困难浓缩为一个简单的作者示例。
我的问题是每次输入一个新作者,提交后呈现的表单数量增加了N+1个作者。(即第一次使用,有1个表格,然后是2个,然后是3个)。我只希望显示一个空白表格,然后稍后将使用其他应用程序来检索数据。
似乎有两种方法可以解决这个问题。1)获取 formset.management_form 以返回最后一个表单(例如切片:'{% for form in formset[-1] %}',这不起作用。2)让 view.py 只发送一个新表单而不是render_to_response() 中的表单集 - 怎么做?
---models.py---
from django.db import models
from django.forms import ModelForm
class Author(models.Model):
first_name = models.CharField(max_length=50)
class AuthorForm(ModelForm):
class Meta:
model = Author
---/models.py---
---views.py---
django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.forms.models import modelformset_factory
from author.models import Author , AuthorForm
def manage_authors(request):
AuthorFormSet = modelformset_factory(Author)
if request.method == 'POST':
formset = AuthorFormSet(request.POST)
if formset.is_valid():
formset.save()
else:
formset = AuthorFormSet()
return render_to_response("manage_authors.html",{"formset": formset,})
---/views.py---
---manage_authors.html---
<!DOCTYPE html>
<html lang="en"
<body>
<form action="" method="post">
<table>
{{ formset.management_form }}
{% for form in formset %}
{{ form }}
{% endfor %}
</table>
<button type="submit">Submit</button>
</form>
</body>
</html>
---/manage_authors.html---
---urls.py---
from django.conf.urls import patterns, include, url
from author.views import manage_authors
urlpatterns = patterns('',
url(r"^author/$", manage_authors),
)
---/urls.py---
更新:感谢使用 modelform 的建议。django 文档只显示了与 modelformset 的模板交互。使用:
---views.py---
def manage_authors(request):
form = AuthorForm(request.POST)
if request.method == 'POST':
if form.is_valid():
form.save()
else:
form = AuthorForm()
return render_to_response("manage_authors.html",{"form": form,})
---/views.py
并且仅在 manage_authors.html 中使用标签 {{ form }} 即可满足我的需要。