我使用一个表单集来向用户显示表单并更新我的数据库。成功后,我想立即用更新(添加/删除)数据和额外的空表单重新显示表单。
数据库更新是正确的。如果填写了额外的表单,它将显示回。但是..。已删除的表单(行)仍在提交后显示,如果额外的表单填充了数据,则在提交后不会出现新的额外表单。
以下是我的view.py代码:
@login_required
def user_setting(request):
user = request.user
OnlineFormSet = modelformset_factory(Online,
can_delete=True,
extra=1)
onlines = Online.objects.filter(user=user).order_by('start')
if request.method == 'POST':
formset = OnlineFormSet(request.POST, queryset=onlines)
if formset.is_valid():
for q in formset.save(commit=False):
q.user=user
q.save()
else:
formset = OnlineFormSet(queryset=onlines)
context['online_formset'] = formset
return response(request, context) 我还尝试在if request.method == 'POST'块的末尾使用重定向,但没有成功.
是否有可能拥有一个全新的表单集,其中包含由于帖子而被提交/删除的所有数据?
发布于 2014-11-21 13:44:33
我就是这样解决这个的..。
首先,模板中出现了一个错误,其中我将action=""更改为action="."
<form id="online" method="post" action=".">
{% csrf_token %}
{{ online_formset }}
<input id="online-submit" type="submit" value="Submit" />
</form>我更新了view.py代码,以便它将根据相同的查询集重新创建一个表单集,即使在此之前发生了一个POST (因此也是一个保存)。
我在POST上创建表单集时使用了Online.objects.all(),而不是仅限于我的用户的onlines查询集。
@login_required
def user_setting(request):
user = request.user
OnlineFormSet = modelformset_factory(Online, can_delete=True,extra=1)
onlines = Online.objects.filter(user=user).order_by('start')
if request.method == 'POST':
formset = OnlineFormSet(request.POST, queryset=Online.objects.all())
if formset.is_valid():
for q in formset.save(commit=False):
q.user=user
q.save()
formset = OnlineFormSet(queryset=onlines)
context['online_formset'] = formset
return response(request, context)
这样,我总是在更新后立即得到一个新的表单集。
https://stackoverflow.com/questions/27036331
复制相似问题