2017-09-19 14 views
0

私はこの問題が数多く提起されていることを知っていますが、私はその問題に関する他のすべての答えを読みましたが、それを動作させる方法はまだ分かりません。私も非常に単純な形でそのtuto(https://godjango.com/9-forms-part-4-formsets/)を続いたが、私はまだこの有名なエラーが出る:Django FormSet管理フォームの問題

['ManagementForm data is missing or has been tampered with'] 

models.py:

class InviteForm2(forms.Form): 
    """ 
    Form for member email invite 
    """ 
    Email = forms.EmailField(
        widget=forms.EmailInput(attrs={ 
         'placeholder': "Member's mail", 
        }), 
        required=False) 

class BaseLinkFormSet(BaseFormSet): 
    def clean(self): 
     """ 
     Adds validation to check that no two links have the same anchor or URL 
     and that all links have both an anchor and URL. 
     """ 
     if any(self.errors): 
      return 

     Email = [] 
     duplicates = False 

     for form in self.forms: 
      if form.cleaned_data: 
       email = form.cleaned_data['Email'] 

       # Check that no two links have the same anchor or URL 
       if email: 
        if email in emails: 
         duplicates = True 
        emails.append(email) 

       if duplicates: 
        raise forms.ValidationError(
         'You cannot provide twice the same mail', 
         code='duplicate_links' 
        ) 

はviews.py:

def printmail2(request): 
    InviteFormSet = formset_factory(InviteForm2, formset=BaseLinkFormSet, extra=7) 

    if request.method == 'POST': 
     formset = InviteFormSet(request.POST, prefix='pfix') 

     if(formset.is_valid()): 
      for i in formset: 
       a = i.value() 
       print(a) 
      print("success") 
     else: 
      print("form not valid") 

    else: 
     formset = InviteForm2() 
    return render(request,'invite2.html', 
         {'formset':formset}) 

invite2.html:

{% load staticfiles %} 


<h2>Form</h2> 
<form method="post"> 
    {% csrf_token %} 
    {{ formset.management_form }} 

    {% for form in formset %} 
    <div class="link-formset"> 
    <p> 
     {{ form.label_tag }}{{ form }} 
    </div> 
     {% for error in field.errors %} 
      <p style="color: red">{{ error }}</p> 
     {% endfor %} 
    </p> 
    {% endfor %} 

    <input type="submit" value="Send Invitations" class="button"/> 
</form> 
    <!-- Include formset plugin - including jQuery dependency --> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script src="{% static 'js/jquery.formset.js' %}"></script> 
    <script> 
     $('.link-formset').formset({ 
      addText: 'add link', 
      deleteText: 'remove' 
     }); 
    </script> 

あなたが私にそれを理解してもらえますか? Thxをお;)あなたがやっているポスト要求の場合

+0

:あなたはPOSTリクエストのための1と一致GETリクエスト用フォームセットを作成する必要があり

formset = InviteForm2() 

? –

答えて

2

formset = InviteFormSet(request.POST, prefix='pfix') 

が、GETリクエストのために、あなたは接頭辞が欠けている、と代わりにフォームクラスを使用しています。あなたはjquery.formset.jsとして使用しているまさにライブラリ

formset = InviteFormSet(prefix='pfix') 
+1

何らかの理由で彼らはまったく別のものを使っています。フォームセットではなくフォーム。 –

+0

私はそれを印刷すると私はそれを得る:​​は正常ですか? [email protected]のメールを印刷するにはどうすればよいですか? – Ben2pop

+0

Thx Alasdair;) – Ben2pop