MultiValueDictKeyError in Django admin

UPDATE

model

class PicturesManager(models.Manager): def create_pictures(self, flat, img): pictures = self.create(car=car, image=img) return pictures def get_file_path(instance, filename): filename = "%s.%s" % (uuid.uuid4(), filename.split('.')[-1]) return os.path.join('car_img/', filename) class Pictures(models.Model): car = models.ForeignKey(Car, verbose_name="Car Image", related_name='pictures') image = models.ImageField(verbose_name="Photo", upload_to = get_file_path, max_length=64) objects = PicturesManager() def __unicode__(self): return str(self.id) 

admin:

 class MyInlineModelAdmin(admin.TabularInline): model = Pictures extra = 3 class CarOptionsInline(admin.StackedInline): model = CarOptions class WatchesInline(admin.StackedInline): model = Watches class CarAdmin(admin.ModelAdmin): inlines = [CarOptionsInline, WatchesInline, MyInlineModelAdmin] 

When I edit Car in admin, I have an error: MultiValueDictKeyError at ... "u'pictures-0-id '"

Traceback:

 Environment: Request Method: POST Request URL: http://127.0.0.1:8000/admin1/cars/car/1/ Django Version: 1.6c1 Python Version: 2.7.5 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sitemaps', 'cars', 'django.contrib.admin') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware') Traceback: File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 114. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper 430. return self.admin_site.admin_view(view)(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 99. response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func 52. response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner 198. return view(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper 29. return bound_func(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 99. response = view_func(request, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func 25. return func(self, *args2, **kwargs2) File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py" in inner 339. return func(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in change_view 1227. if all_valid(formsets) and form_validated: File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in all_valid 415. if not formset.is_valid(): File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in is_valid 292. err = self.errors File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in errors 267. self.full_clean() File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in full_clean 314. form = self.forms[i] File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py" in __get__ 49. res = instance.__dict__[self.func.__name__] = self.func(instance) File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in forms 133. forms = [self._construct_form(i) for i in xrange(self.total_form_count())] File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in _construct_form 839. form = super(BaseInlineFormSet, self)._construct_form(i, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in _construct_form 555. pk = self.data[pk_key] File "/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py" in __getitem__ 301. raise MultiValueDictKeyError(repr(key)) Exception Type: MultiValueDictKeyError at /admin1/cars/car/1/ Exception Value: "u'pictures-0-id'" 

How to fix it? I am using Django 1.6c1.

Thanks!

+8
python django django-models
source share
5 answers

Answer: update the admin template.

+1
source share

I think this is due to Django 1.6 ticket

#ticket 13696 - display of the built-in pk field is provided

You need to update the following admin templates:

  • stacked.html
  • tabular.html

Delete one line:

 {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} 

and add the lines:

 {% if inline_admin_form.needs_explicit_pk_field %} {{ inline_admin_form.pk_field.field }} {% endif %} 
+18
source share

If you are already on a newer version of django and are still getting this, make sure that your non-AutoField PK has "editable = False" in the model definition.

+11
source share

For Django <= 1.7.3, also make sure that the primary key field of your inline model is AutoField:

wrong:

 class Car(models.Model): id = IntegerField(primary_key=True) 

correct:

 class Car(models.Model): id = AutoField(primary_key=True) 

See https://code.djangoproject.com/ticket/15665

+2
source share

An update of grappelli to 2.5.1 was installed for me (assuming you are using grappelli ofc). I assume this is because it is performing the specified updates to the admin template.

 pip install django-grappelli==2.5.1 
+1
source share

All Articles