gpt4 book ai didi

python - 如何在 Django 中编辑内联表单集中的模型对象

转载 作者:行者123 更新时间:2023-12-01 07:07:02 25 4
gpt4 key购买 nike

在 Django 中,我尝试使用内联表单集工厂,以便用户可以通过外键编辑与父模型相关的模型实例。由于某种原因,我尝试的方法不会保存我单击“提交”时所做的更改。

我的 View 是这样的(不包括渲染):

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()

这允许我单独保存表单集中的每个表单,因为我只更改表单集的一部分。

最佳答案

你的代码对我有用。也许您更改了环境设置或其他内容。当您提交表单时,是否显示任何错误?如果是这样,请向我们显示您的错误详细信息。

你可以这样尝试:

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:
print("something is wrong in validation")
print(formset.errors)
formset = SetLoggerFormSet(instance=exercisename)

关于python - 如何在 Django 中编辑内联表单集中的模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com