#8562: OneToOnes + Inlines + raw_id_fields fails in Admin
-----------------------------+----------------------------------------------
 Reporter:  magneto          |       Owner:  nobody    
   Status:  new              |   Milestone:            
Component:  Admin interface  |     Version:  SVN       
 Keywords:  admin onetoone   |       Stage:  Unreviewed
Has_patch:  0                |  
-----------------------------+----------------------------------------------
 This goes back to the primary keys and missing in the Admin forms as
 hidden fields, but it also effect 2 things .  I've brought this up before
 #7938 for instance, where a slightly different bug was mended.

 1) Addition of an element
 2) editing a OneToOne directly

 {{{
 #create a simple model
 from django.db import models

 class BaseMoo(models.Model):
         name = models.CharField(max_length = 50)
         is_moo = models.BooleanField(default = True)


 class MooOne(models.Model):
         basemoo = models.OneToOneField(BaseMoo, primary_key = True)
         is_moo_one = models.BooleanField(default = True)

 }}}

 {{{
 #create the ADmin
 from testmod.models import BaseMoo, MooOne

 from django.contrib import admin

 class MooOne_Inline(admin.StackedInline):
         model = MooOne
         extra = 1
         max_num = 1
         raw_id_fields = ('basemoo',)

 class BaseMooOptions(admin.ModelAdmin):
         inlines = [MooOne_Inline]
         list_display = ('name', 'is_moo',)

 class MooOneOptions(admin.ModelAdmin):
         raw_id_fields = ('basemoo',)
         list_display = ('basemoo', 'is_moo_one',)

 admin.site.register(BaseMoo, BaseMooOptions)
 admin.site.register(MooOne, MooOneOptions)

 }}}

 1) In Admin, try to 'add' a BaseMoo Object.  It will give you the option
 for the Inlined MooOne, but on save the MooOne object is _not_ saved

 2) ok a work around (but assumes that MooOne is registered as not an
 inline like above), so try to add the MooOne directly buy adding one
 attached to BaseMoo ..

 3) Go back to the BaseMoo object, try to edit and save .. boom

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

 Exception Type: KeyError at /testmod/basemoo/34/
 Exception Value: 'basemoo_id'
 }}}

 4) Ok so now go back to the MooOne raw object and try to edit it.  Well
 you can, except now the raw_id_fields of 'BaseMoo" is NOT filled in
 automatically, (If i turn off raw_id_fields, the select box does _not_
 choose the current BaseMoo Object).  Meaning the 'save' will fail until
 you pick the old object again.

 I Imagine all of these little issues are related to the primary_key vs
 autofield display bits in admin.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/8562>
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