簡體   English   中英

如何在 Django 的內聯表單集中編輯 model 對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM