2017-12-04 10 views
1

こんにちは私はmodelformset_factoryを作成しました。オプションで私はcan_delete = Trueを選択しました。マークされたオブジェクトを 'DELETE'として削除する方法はわかりません:データベース。私はいくつかのやり方でこれをやろうとしていましたが、それは仕事をしませんでした。私もdjango formsetmodelsのドキュメントでそれを探していたが、これは私を助けませんでした。このオプションを使用すると、htmlページに追加のチェックボックスが表示されます。削除してマークするだけで、コンソールに表示されます。 {'username': 'sw'、 'email': '[email protected]'、 'city ':' ss '、' code ':12345、' id ':,' DELETE ':False}Django modelformset_factory can_deleteでマークされたオブジェクトを削除する

データベースにフォームを保存する作業はしていますが、マークされたフォームをデータベースから削除する方法はわかりません。

私はあらゆる助けに非常に感謝します。私は私が私のviews.py機能に追加した

その後
class TestModel(models.Model): 
username = models.CharField(max_length=120) 
email = models.EmailField() 
city = models.CharField(max_length=120) 
code = models.IntegerField() 
#W admin panelu za miast TestModel object bedzie username 
def __str__(self): 
    return self.username 

models.pyにモデルからmodelformset_factoryを行っている

def django_modelformset(request): 
TestModelFormset = modelformset_factory(TestModel, fields=['username', 'email', "city", 
                  "code"], extra=1, can_delete=True) 
formset = TestModelFormset(request.POST or None) 

if formset.is_valid(): 
    for form in formset: 
     print(form) 

     print(form.cleaned_data) 
     form.save() 
context = {"formset": formset} 
return render(request, "modelformset.html", context) 

私modelformset.htmlは、次のようになります。

<form method="POST" action=""> 
{% csrf_token %} 

{{ formset.management_form}} 
{% for form in formset %} 
<div> 

    {{ form.as_p }} 
    <hr/> 
</div> 
{% endfor %} 
<input type="submit" value="Save"> 

答えて

0

私は個人的にこれをしなければならなかったが、ドキュメントからいくつかの選択肢があるようだ。

  1. 各フォームの代わりにformsetを呼び出して保存します。

    if formset.is_valid(): 
        formset.save() 
    
  2. 各フォームをループする必要がある場合は、このようなことがあります。

    if formset.is_valid(): 
        for form in formset: 
         print(form.cleaned_data) 
         if form.cleaned_data["DELETE"]: 
          # Do what you want with the form data 
          # i.e. get the object from the database and delete it. 
         else: 
          form.save() 
    
  3. 削除されたフォームを別々にループします。

    if formset.is_valid():   
        forms = formset.save(commit=False) 
        for object in formset.deleted_objects: 
         object.delete() 
    
+0

第1の方法は、後で私のために働いている私は、助けに感謝を2人をテストします。 – Ppyyt

関連する問題