#12577: New validation behaviour breaks django.contrib.contenttypes when
unique_toghether is used
----------------------------------------+-----------------------------------
Reporter: [email protected] | Owner: nobody
Status: new | Milestone:
Component: Uncategorized | Version: SVN
Keywords: | Stage: Unreviewed
Has_patch: 0 |
----------------------------------------+-----------------------------------
The behaviour introduced with modelvalidation breaks the generic content
type framework
This is the simplest code used to reproduce the bug
{{{
# models.py
class PhoneNumber(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type',
'object_id')
phone = models.CharField(max_length=30)
class Meta:
unique_together = (('content_type', 'object_id', 'phone',),)
def __unicode__(self):
return self.phone
class Contact(models.Model):
name = models.CharField(max_length=50)
phones = generic.GenericRelation(PhoneNumber)
def __unicode__(self):
return self.name
# admin.py
class PhoneInline(GenericTabularInline):
model = PhoneNumber
extra = 1
class ContactAdmin(admin.ModelAdmin):
inlines = (PhoneInline,)
admin.site.register(Contact, ContactAdmin)
}}}
Now trying to save a contact instance with a phone number via the admin
interface, results a 404 KeyError
{{{
Environment:
Request Method: POST
Request URL: http://localhost:8000/admin/example/genericcontact/1/
Django Version: 1.2 alpha 1
Python Version: 2.6.4
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.comments',
'example']
Installed Middleware:
('django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.middleware.transaction.TransactionMiddleware')
Traceback:
File "/home/raf/src/www/simple/site-
packages/django/django/core/handlers/base.py" in get_response
101. response = callback(request, *callback_args,
**callback_kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/contrib/admin/options.py" in wrapper
237. return self.admin_site.admin_view(view)(*args,
**kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/utils/decorators.py" in __call__
36. return self.decorator(self.func)(*args, **kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/utils/decorators.py" in _wrapped_view
86. response = view_func(request, *args, **kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/utils/decorators.py" in __call__
36. return self.decorator(self.func)(*args, **kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/views/decorators/cache.py" in _wrapped_view_func
70. response = view_func(request, *args, **kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/contrib/admin/sites.py" in inner
187. return view(request, *args, **kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/utils/decorators.py" in _wrapped_view
86. response = view_func(request, *args, **kwargs)
File "/home/raf/src/www/simple/site-
packages/django/django/db/transaction.py" in _commit_on_success
295. res = func(*args, **kw)
File "/home/raf/src/www/simple/site-
packages/django/django/contrib/admin/options.py" in change_view
883. if all_valid(formsets) and form_validated:
File "/home/raf/src/www/simple/site-
packages/django/django/forms/formsets.py" in all_valid
317. if not formset.is_valid():
File "/home/raf/src/www/simple/site-
packages/django/django/forms/formsets.py" in is_valid
238. if bool(self.errors[i]):
File "/home/raf/src/www/simple/site-
packages/django/django/forms/formsets.py" in _get_errors
212. self.full_clean()
File "/home/raf/src/www/simple/site-
packages/django/django/forms/formsets.py" in full_clean
254. self.clean()
File "/home/raf/src/www/simple/site-
packages/django/django/forms/models.py" in clean
412. self.validate_unique()
File "/home/raf/src/www/simple/site-
packages/django/django/forms/models.py" in validate_unique
435. row_data = tuple([form.cleaned_data[field] for
field in unique_check])
Exception Type: KeyError at /admin/example/genericcontact/1/
Exception Value: content_type
}}}
--
Ticket URL: <http://code.djangoproject.com/ticket/12577>
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 [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.