【发布时间】:2020-02-12 08:50:36
【问题描述】:
在 Django 中,我尝试使用内联表单集工厂,以便用户可以通过外键编辑与父模型相关的模型实例。出于某种原因,我尝试的方法不会保存我在单击提交时所做的更改。
我的视图是这样的(不包括渲染):
def edit_sets(request, exercisegroup_id):
exercisename = ExerciseName.objects.get(pk=exercisegroup_id)
SetLoggerFormSet = inlineformset_factory(ExerciseName, SetLogger, fields=('weight','reps',))
formset = SetLoggerFormSet(instance=exercisename)
if request.method == 'POST':
formset = SetLoggerFormSet(request.POST, instance=exercisename)
if formset.is_valid():
formset.save()
else:
formset = SetLoggerFormSet(instance=exercisename)
我在模板的表单集中显示每个表单,以便用户可以单独编辑实例:
<form method="post">{% csrf_token %}
{{ formset.management_form}}
<table>
{% for form in formset %}
{{ form }}
{% endfor %}
</table>
<button type="submit" class="save btn btn-default">Save set</button>
</form>
不知道为什么这不起作用。表单按原样显示,并且此方法以前曾用于添加对象,但我仍然无法使用它来替换查询集中的这些对象之一。我错过了什么我应该做的不同的事情吗?
编辑:
原来解决方案是将我的 request.method 语句更改为:
if request.method == 'POST':
formset = SetsFormSet(request.POST, instance=exercisename)
for form in formset:
if form.is_valid():
form.save()
这允许我将每个表单单独保存在表单集中,因为我只更改了表单集中的一部分。
【问题讨论】:
-
嘿,你能看一下stackoverflow.com/questions/61285171/initialize-a-formset我正在尝试编辑表单集,但未能呈现编辑表单
标签: python django django-forms backend formset