#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
-~----------~----~----~----~------~----~------~--~---