Reputation: 545
When hitting save in the admin on a model editing page I get this traceback:
Traceback (most recent call last):
File "lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "lib/python2.7/site-packages/django/contrib/admin/options.py", line 616, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "lib/python2.7/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "lib/python2.7/site-packages/django/contrib/admin/sites.py", line 233, in inner
return view(request, *args, **kwargs)
File "lib/python2.7/site-packages/django/contrib/admin/options.py", line 1519, in change_view
return self.changeform_view(request, object_id, form_url, extra_context)
File "lib/python2.7/site-packages/django/utils/decorators.py", line 34, in _wrapper
return bound_func(*args, **kwargs)
File "lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "lib/python2.7/site-packages/django/utils/decorators.py", line 30, in bound_func
return func.__get__(self, type(self))(*args2, **kwargs2)
File "lib/python2.7/site-packages/django/utils/decorators.py", line 145, in inner
return func(*args, **kwargs)
File "lib/python2.7/site-packages/django/contrib/admin/options.py", line 1466, in changeform_view
if all_valid(formsets) and form_validated:
File "lib/python2.7/site-packages/django/forms/formsets.py", line 439, in all_valid
if not formset.is_valid():
File "lib/python2.7/site-packages/django/forms/formsets.py", line 304, in is_valid
self.errors
File "lib/python2.7/site-packages/django/forms/formsets.py", line 278, in errors
self.full_clean()
File "lib/python2.7/site-packages/django/forms/formsets.py", line 325, in full_clean
for i in range(0, self.total_form_count()):
File "lib/python2.7/site-packages/django/forms/formsets.py", line 115, in total_form_count
return min(self.management_form.cleaned_data[TOTAL_FORM_COUNT], self.absolute_max)
File "lib/python2.7/site-packages/django/forms/formsets.py", line 97, in management_form
code='missing_management_form',
ValidationError: [u'I dati del ManagementForm sono mancanti oppure sono stati manomessi’]
The error message in Italian reads
ManagementForm data is missing or has been tampered with
I also noticed the POST request contains an extra part with prefix in names and empty id which looks suspicious:
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="csrfmiddlewaretoken"
0123456789abcdef
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-TOTAL_FORMS"
41
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-INITIAL_FORMS"
41
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-MIN_NUM_FORMS"
0
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-MAX_NUM_FORMS"
1000
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-0-id"
405718
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-0-property”
87462
[...]
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-40-id"
462250
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-40-property"
87462
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-__prefix__-id"
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="model_set-__prefix__-property"
87462
------WebKitFormBoundaryHni3TflxO2xxoMnc
Content-Disposition: form-data; name="_save"
Salva
------WebKitFormBoundaryHni3TflxO2xxoMnc--
Django Inline Admin Formset extra entry has prefix instead of number suggests display: none is not picked up from forms.css (empty-form class) but in my case it seems it is. I’m looking at Chrome Developer Tools.
My inlines are defined as:
class ModelInline1(admin.TabularInline):
model = Model1
show_change_link = True
can_delete = False
extra = 0
fields = ['created', 'type', 'formatted_text',
'picture_tag', 'from_seller', 'is_payment']
readonly_fields = ['created', 'type', 'formatted_text',
'picture_tag', 'from_seller', 'is_payment']
class ModelInline2(admin.TabularInline):
model = Model2
show_change_link = True
extra = 0
fields = ['created', 'place', 'status', 'code']
readonly_fields = ['created', 'place', 'status', 'code']
@admin.register(models.Conversation)
class ModelAdmin(FSMTransitionMixin, admin.ModelAdmin):
fsm_field = ['status']
list_display = ['id', 'buyer', 'item', 'status', 'last_message', 'created']
list_filter = ['status', 'created']
fields = ['status', 'created', 'last_message', 'tracking_number']
readonly_fields = ['status', 'created', 'last_message', 'tracking_number']
inlines = [ModelInline1, ModelInline2]
ordering = ['-created']
search_fields = [
'id',
'buyer__username',
'item__name',
'item__user__username'
]
Upvotes: 1
Views: 1144
Reputation: 545
The error was basically this Django admin: missing inlines for some records.
I did not notice the second inline was completely missing. This happens when the __unicode__
method of the model used in the inline raises an error. Unfortunately, the admin fails silently in this case without rendering the inline, but then saving the form fails with ValidationError
.
Upvotes: 1