#8695: KeyError on save of model with inline-edited OneToOne sharing primary key
-----------------------------+----------------------------------------------
 Reporter:  kmtracey         |       Owner:  nobody    
   Status:  new              |   Milestone:  1.0       
Component:  Admin interface  |     Version:  SVN       
 Keywords:                   |       Stage:  Unreviewed
Has_patch:  0                |  
-----------------------------+----------------------------------------------
 This ticket is an attempt to state one simple re-creatable problem so as
 to simplify the tangled issues raised in #8241 and #8562.

 Given these models:

 {{{
 from django.db import models

 # Create your models here.
 class Parent(models.Model):
     name = models.CharField(max_length=50)
     def __unicode__(self):
         return self.name

 class Child(models.Model):
     name = models.CharField(max_length=50)
     parent = models.OneToOneField(Parent, primary_key=True)
     def __unicode__(self):
         return '%s, child of %s' % (self.name, unicode(self.parent))

 }}}

 and this admin.py:

 {{{
 from django.contrib import admin
 from inlinet1.models import Parent, Child

 class ChildInline(admin.StackedInline):
     model = Child
     max_num = 1

 class ParentAdmin(admin.ModelAdmin):
     inlines = [ChildInline]
     list_display = ('name',)

 class ChildAdmin(admin.ModelAdmin):
     list_display = ('name', 'parent',)

 admin.site.register(Parent, ParentAdmin)
 admin.site.register(Child, ChildAdmin)

 }}}

 From the admin:

 1 - Select Add on Parents, fill in parent name & inline-edited child name,
 select "Save and continue editing"

 2 - Select "Save and continue editing" again and you'll get an exception:

 {{{
 Environment:

 Request Method: POST
 Request URL: http://localhost:8888/admin/inlinet1/parent/3/
 Django Version: 1.0-beta_2-SVN-8712
 Python Version: 2.5.1
 Installed Applications:
 ['django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.sites',
  'django.contrib.admin',
  'django.contrib.redirects',
  'playground.inlinet1']
 Installed Middleware:
 ('django.middleware.common.CommonMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.middleware.doc.XViewMiddleware',
  'django.middleware.transaction.TransactionMiddleware')


 Traceback:
 File "/home/kmt/tmp/django/trunk/django/core/handlers/base.py" in
 get_response
   86.                 response = callback(request, *callback_args,
 **callback_kwargs)
 File "/home/kmt/tmp/django/trunk/django/contrib/admin/sites.py" in root
   173.                 return self.model_page(request, *url.split('/', 2))
 File "/home/kmt/tmp/django/trunk/django/views/decorators/cache.py" in
 _wrapped_view_func
   44.         response = view_func(request, *args, **kwargs)
 File "/home/kmt/tmp/django/trunk/django/contrib/admin/sites.py" in
 model_page
   192.         return admin_obj(request, rest_of_url)
 File "/home/kmt/tmp/django/trunk/django/contrib/admin/options.py" in
 __call__
   196.             return self.change_view(request, unquote(url))
 File "/home/kmt/tmp/django/trunk/django/db/transaction.py" in
 _commit_on_success
   238.                 res = func(*args, **kw)
 File "/home/kmt/tmp/django/trunk/django/contrib/admin/options.py" in
 change_view
   588.                     self.save_formset(request, form, formset,
 change=True)
 File "/home/kmt/tmp/django/trunk/django/contrib/admin/options.py" in
 save_formset
   378.         formset.save()
 File "/home/kmt/tmp/django/trunk/django/forms/models.py" in save
   280.         return self.save_existing_objects(commit) +
 self.save_new_objects(commit)
 File "/home/kmt/tmp/django/trunk/django/forms/models.py" in
 save_existing_objects
   294.             obj =
 existing_objects[form.cleaned_data[self.model._meta.pk.attname]]

 Exception Type: KeyError at /admin/inlinet1/parent/3/
 Exception Value: 'parent_id'

 }}}

 The changes to `add_fields` in the patches for #8562 fix the error, but
 perhaps not in the correct fashion.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/8695>
Django Code <http://code.djangoproject.com/>
The web framework for perfectionists with deadlines
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to