#14760: Admin inlines with file/image field fails to save_as
----------------------------------+-----------------------------------------
 Reporter:  paulos                |       Owner:  nobody    
   Status:  new                   |   Milestone:            
Component:  django.contrib.admin  |     Version:  1.2       
 Keywords:                        |       Stage:  Unreviewed
Has_patch:  0                     |  
----------------------------------+-----------------------------------------
 How to reproduce:
  * declare an admin inline which "model" property referes to a model
 containing an image field and another char field
  * declare a parent ModelAdmin having save_as=True
  * in the admin, create and save a new parent with one or more inlines
  * try to save_as

 Result:
  * the form does not validate, image or file field will be empty with
 error: "This field is required.", extra inlines gone.
  * if you try to upload other file admin blows up with ValueError: invalid
 literal for int() with base 10: ''

 Test case:
 - dummy/models.py
 {{{
 from django.db import models

 class Foo(models.Model):
     name = models.CharField(max_length=30)

 class Bar(models.Model):
     parent = models.ForeignKey(Foo)
     title = models.CharField(max_length=30)
     img = models.ImageField(upload_to='testpath')
 }}}
 - dummy/admin.py
 {{{
 from django.contrib import admin
 from bugtest.dummy.models import *

 class BarInline(admin.StackedInline):
     model = Bar

 class FooAdmin(admin.ModelAdmin):
     inlines = (BarInline,)
     save_as = True

 admin.site.register(Foo, FooAdmin)
 }}}

 Traceback:
 {{{
 Django Version: 1.2.3
 Python Version: 2.6.5
 Installed Applications:
 ['django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.sites',
  'django.contrib.messages',
  'django.contrib.admin',
  'django.contrib.admindocs',
  'bugtest.dummy',
 ]
 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')

 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/core/handlers/base.py" in
 get_response
   100.                     response = callback(request, *callback_args,
 **callback_kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/contrib/admin/options.py" in
 wrapper
   239.                 return self.admin_site.admin_view(view)(*args,
 **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/utils/decorators.py" in
 _wrapped_view
   76.                     response = view_func(request, *args, **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/views/decorators/cache.py" in
 _wrapped_view_func
   69.         response = view_func(request, *args, **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/contrib/admin/sites.py" in inner
   190.             return view(request, *args, **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/utils/decorators.py" in _wrapper
   21.             return decorator(bound_func)(*args, **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/utils/decorators.py" in
 _wrapped_view
   76.                     response = view_func(request, *args, **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/utils/decorators.py" in bound_func
   17.                 return func(self, *args2, **kwargs2)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/db/transaction.py" in
 _commit_on_success
   299.                     res = func(*args, **kw)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/contrib/admin/options.py" in
 add_view
   792.                                   prefix=prefix,
 queryset=inline.queryset(request))
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/forms/models.py" in __init__
   704.                                                 queryset=qs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/forms/models.py" in __init__
   429.         super(BaseModelFormSet, self).__init__(**defaults)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/forms/formsets.py" in __init__
   47.         self._construct_forms()
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/forms/formsets.py" in
 _construct_forms
   97.             self.forms.append(self._construct_form(i))
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/forms/models.py" in _construct_form
   717.         form = super(BaseInlineFormSet, self)._construct_form(i,
 **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/forms/models.py" in _construct_form
   448.                 connection=connections[self.get_queryset().db])
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/db/models/fields/subclassing.py" in
 inner
   53.             return func(*args, **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/db/models/fields/subclassing.py" in
 inner
   53.             return func(*args, **kwargs)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/db/models/fields/__init__.py" in
 get_db_prep_lookup
   306.             value = self.get_prep_lookup(lookup_type, value)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/db/models/fields/__init__.py" in
 get_prep_lookup
   292.             return self.get_prep_value(value)
 File "/usr/local/lib/python2.6/dist-
 packages/Django-1.2.3-py2.6.egg/django/db/models/fields/__init__.py" in
 get_prep_value
   479.         return int(value)
 }}}

-- 
Ticket URL: <http://code.djangoproject.com/ticket/14760>
Django <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 django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to