![](/img/trans.png)
[英]Django: How to set initial values for a field in an inline model formset?
[英]How to edit model objects in an inline formset in Django
在 Django 我正在嘗試使用內聯表單集工廠,以便用戶可以通過外鍵編輯與父 model 相關的 model 的實例。 出於某種原因,我嘗試的方法不會保存我在單擊提交時所做的更改。
我的觀點是這樣的(不包括渲染):
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.