2016-09-13 8 views
0

フォームを送信すると(フォームに1つ以上のフォームが入力された場合) - FormSetは1つのフォームのみのデータを保存し、残りのデータは消えます...FormSetは1つのフォームのデータのみを保存します

マイテンプレート:

<div id="data"> 
    <form method="post" action="/lookup/" id="test_data">{% csrf_token %} 
    {{ formset.management_form }} 
     {% for form in formset %} 
      <section id="test_data_row"> 
      {{ form }} 
      </section> 
     {% endfor %} 
    </form> 
</div> 
<div class="bt"> 
    <button type="submit" class="btn btn-default" id="submit_form" form="test_data">Submit</button> 
    <button type="button" class="btn btn-default" id="add" value="Add row"/>Add row</button> 
</div> 

マイforms.py:

class LookupForm(forms.ModelForm): 
    class Meta: 
     model = look 
     exclude =() 
LookupFormSet = formset_factory(LookupForm, can_delete=True) 

マイモデル

class look(models.Model): 
    class Meta(): 
     db_table = 'lookup' 
    id_device = models.CharField(max_length=75) 
    phone_number = models.CharField(max_length=100) 
    phone_number_country = models.CharField(max_length=1000) 
    text = models.CharField(max_length=1000, default=None) 

私のviews.py:

def manage_articles(request): 
    LookupFormSet = modelformset_factory(model=look, exclude=()) 
    if request.method == "POST": 
     formset = LookupFormSet(
     request.POST, request.FILES, 
     queryset=look.objects.none(), 
    ) 
     if formset.is_valid(): 
     for form in formset: 
      form.save() 
     return HttpResponseRedirect('/') 
    else: 
     formset = LookupFormSet(queryset=look.objects.none()) 
    return render(request, 'req/lookup.html', {'formset': formset}) 

私のJS(JSのための新しいフォームを追加します):

document.getElementById('add').onclick = duplicate; 
var i = 0; 
var original = document.getElementById('test_data'); 
function duplicate() { 
    var clone = original.cloneNode(true); // "deep" clone 
    clone.id = "test_data" + ++i; // there can only be one element with an ID 
    original.parentNode.appendChild(clone); 
} 
+0

'formset_factory'ではなく、' 'modelformset_factory'(https://docs.djangoproject.com/en/1.10/ref/forms/models/#modelformset-factory)を使用してください。 – Alasdair

+0

@Alasdair、私はから私のコード を変更した場合 - 'LookupFormSet = formset_factory(LookupForm)' へ:DBテーブルから 'LookupFormSet = modelformset_factory(モデル=見て、(=除外))' すべてのデータであり、私のページに表示されます:http://take.ms/PRZl5と私はなぜか分からないのですか? –

+0

あなたのコメントの半分が見当たりません - コードを変更するとどうなりますか? – Alasdair

答えて

0

それは複数のフォームが含まれているとして、あなたはフォームセットを保存することはできません。だから私はあなたがあなたのコードを変更することをお勧め:

if formset.is_valid(): 
     for form in formset: 
      form.save() 
     return HttpResponseRedirect('/') 

docsを参照してください。

+0

私の問題は解決しましたが、新しい問題があります....データは1つのフォームからのみ保存され、他のデータは単に失われます( –

+0

インデントに注意しましたか? forループ。 –

関連する問題