Note that there are some explanatory texts on larger screens.

plurals
  1. PODjango ValidationError for custom model formset with custom fields (data is missing or has been tampered with)
    primarykey
    data
    text
    <p>I'm working on a model formset for a Membership model (models auth.User membership to app.Project). Here's app/forms.py, after I trimming things I have confirmed to be irrelevant after commenting them out:</p> <pre><code>class EditMembership(forms.ModelForm): delete = forms.BooleanField(required=False, initial=False) class Meta: model = models.Membership fields = ('is_owner',) def clean_delete(self): return self.cleaned_data['delete'] class BaseEditMemberships(forms.models.BaseModelFormSet): # Some custom methods not dealing with validation. pass EditMembershipSet = forms.models.modelformset_factory(models.Membership, form=EditMembership, extra=0, formset=BaseEditMemberships) </code></pre> <p>Here is my template:</p> <pre><code>&lt;form method="{{ method|default:"post" }}" action="{{ action }}"&gt; {% csrf_token %} &lt;ul&gt; {% for form in formset %} &lt;li&gt;{{ form.instance.user}}&lt;/li&gt; {{ form.as_ul }} {% endfor %} &lt;/ul&gt; &lt;input type="submit" value="{{ submit_value|default:"Submit" }}" /&gt; &lt;/form&gt; </code></pre> <p>And my view:</p> <pre><code>@ownership_required(message="You must be an owner to edit memberships.") def edit_memberships(request, pk): project = get_object_or_404(models.Project, pk=pk) if request.method == "GET": formset = forms.EditMembershipSet( queryset=project.membership_set.all() ) return render_formset_fullpage(request, formset, "Edit Memberships", template=forms.EDITMEMBERSHIPS_PATH) elif request.method == "POST": formset = forms.EditMembershipSet(request.POST) return HttpResponse("Hooray!") </code></pre> <p>And the model in question:</p> <pre><code>class Membership(models.Model): class Meta: unique_together = ('project', 'user') project = models.ForeignKey('common.Project', editable=False) user = models.ForeignKey('auth.User') is_owner = models.BooleanField(default=False, blank=False, help_text="Indicates ownership of the project") project_alias = models.CharField(max_length=CHARFIELD_SHORT, help_text="User-given name", blank=True) </code></pre> <p>The problem is I keep getting a ValidationError back after doing the POST:</p> <pre><code>ValidationError at /project/4/memberships [u'ManagementForm data is missing or has been tampered with'] </code></pre> <p>From what I can tell, forms.EditMembership is doing OK. I can render that form and recreate it from the POST with no validation error, so I guess it is something wrong with the way I am using BaseEditMemberships/EditMembershipSet.</p> <p>EDIT:</p> <p>Just to give you even more information, here are an example form which is generated and the POST vars for one of my test requests. The form:</p> <pre><code>&lt;form method="post" action=""&gt; &lt;div style='display:none'&gt;&lt;input type='hidden' name='csrfmiddlewaretoken' value='d6d535efd35e83076e1ac14a82ef4cdc' /&gt;&lt;/div&gt; &lt;ul&gt; &lt;li&gt;someuser&lt;/li&gt; &lt;li&gt;&lt;label for="id_form-0-is_owner"&gt;Is owner:&lt;/label&gt; &lt;input checked="checked" type="checkbox" name="form-0-is_owner" id="id_form-0-is_owner" /&gt; &lt;/li&gt; &lt;li&gt;&lt;label for="id_form-0-delete"&gt;Delete:&lt;/label&gt; &lt;input type="checkbox" name="form-0-delete" id="id_form-0-delete" /&gt; &lt;input type="hidden" name="form-0-id" value="8" id="id_form-0-id" /&gt; &lt;/li&gt; &lt;/ul&gt; &lt;input type="submit" value="Submit" /&gt; &lt;/form&gt; </code></pre> <p>Corresponding POST vars if I check the delete box:</p> <ul> <li>form-0-id: u'8'</li> <li>csrfmiddlewaretoken: u'd6d535efd35e83076e1ac14a82ef4cdc'</li> <li>form-0-delete: u'on'</li> <li>form-0-is_owner: u'on'</li> </ul>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload