#12028: Generic Inline doesn't validate unique_together ------------------------------------------------------------------------------------------+ Reporter: diverman | Owner: nobody Status: new | Milestone: Component: Contrib apps | Version: SVN Keywords: content type generic inline unique validation formset admin modeladmin model | Stage: Unreviewed Has_patch: 0 | ------------------------------------------------------------------------------------------+ Hello, consider these models: {{{ ### models.py class Tag(models.Model): tag = models.CharField(max_length=256)
class TaggedItem(BaseModel): tag = models.ForeignKey('Tag') content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField(db_index=True) content_object = generic.GenericForeignKey() class Meta: unique_together = (('content_type', 'object_id', 'tag'),) class Page(models.Model): text = models.TextField() ### admin.py class TaggedItemInline(generic.GenericTabularInline): model = TaggedItem class PageAdmin(admin.ModelAdmin): inlines = ( TaggedItemInline, ) admin.site.register(Tag) admin.site.register(TaggedItem) admin.site.register(Page, PageAdmin) }}} When I edit Page in Admin and try to set non-unique values, it falls into IntegrityError. When I modify TaggedItem in Admin directly, validation of unique_together works fine. {{{ Traceback: File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response 92. response = callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.5/site-packages/django/contrib/admin/sites.py" in root 490. return self.model_page(request, *url.split('/', 2)) File "/usr/lib/python2.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 70. response = view_func(request, *args, **kwargs) File "/usr/lib/python2.5/site-packages/django/contrib/admin/sites.py" in model_page 509. return admin_obj(request, rest_of_url) File "/usr/lib/python2.5/site-packages/django/contrib/admin/options.py" in __call__ 1098. return self.change_view(request, unquote(url)) File "/usr/lib/python2.5/site-packages/django/db/transaction.py" in _commit_on_success 240. res = func(*args, **kw) File "/usr/lib/python2.5/site-packages/django/contrib/admin/options.py" in change_view 833. self.save_formset(request, form, formset, change=True) File "/usr/lib/python2.5/site-packages/django/contrib/admin/options.py" in save_formset 563. formset.save() File "/usr/lib/python2.5/site-packages/django/forms/models.py" in save 522. return self.save_existing_objects(commit) + self.save_new_objects(commit) File "/usr/lib/python2.5/site-packages/django/forms/models.py" in save_new_objects 657. self.new_objects.append(self.save_new(form, commit=commit)) File "/usr/lib/python2.5/site- packages/django/contrib/contenttypes/generic.py" in save_new 335. return save_instance(form, new_obj, commit=commit) File "/usr/lib/python2.5/site-packages/django/forms/models.py" in save_instance 78. instance.save() File "/usr/lib/python2.5/site-packages/django/db/models/base.py" in save 410. self.save_base(force_insert=force_insert, force_update=force_update) File "/usr/lib/python2.5/site-packages/django/db/models/base.py" in save_base 495. result = manager._insert(values, return_id=update_pk) File "/usr/lib/python2.5/site-packages/django/db/models/manager.py" in _insert 177. return insert_query(self.model, values, **kwargs) File "/usr/lib/python2.5/site-packages/django/db/models/query.py" in insert_query 1087. return query.execute_sql(return_id) File "/usr/lib/python2.5/site-packages/django/db/models/sql/subqueries.py" in execute_sql 320. cursor = super(InsertQuery, self).execute_sql(None) File "/usr/lib/python2.5/site-packages/django/db/models/sql/query.py" in execute_sql 2369. cursor.execute(sql, params) File "/usr/lib/python2.5/site-packages/django/db/backends/util.py" in execute 19. return self.cursor.execute(sql, params) Exception Type: IntegrityError at /admin/web/page/1/ Exception Value: duplicate key value violates unique constraint "tag_taggeditem_content_type_id_key" }}} -- Ticket URL: <http://code.djangoproject.com/ticket/12028> 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-updates@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 -~----------~----~----~----~------~----~------~--~---