Opened 12 years ago
Closed 12 years ago
#21705 closed Bug (invalid)
Generic Relations fail to detect validation error appropritely
| Reported by: | Owned by: | nobody | |
|---|---|---|---|
| Component: | contrib.admin | Version: | 1.6 |
| Severity: | Normal | Keywords: | AdminSite, GenericRelation, unique_together, IntegrityError |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Hi. When using a GenericRelation on a Model to create a M2M generic relation between two other models, with a unique_together attribute on the relation. admin site fails to detect uniqueness-validation and instead of reporting a unique violation validation error it raises an IntegrityError e.g. IntegrityError: columns tag_id, object_id are not unique
here is the case:
class Tag(models.Model):
slug = models.SlugField(max_length=100)
def __unicode__(self):
return self.slug
class News(models.Model):
title = models.CharField(max_length=100)
def __unicode__(self):
return self.title
class Tagger(models.Model):
class Meta:
'''unique_together = ('tag', 'object_id')'''
tag = models.ForeignKey(Tag)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
and creating the admin objects like this:
class TagAdmin(admin.ModelAdmin):
list_display = ('slug',)
class TabularTagInline(generic.GenericTabularInline):
model = models.Tagger
extra = 2
class NewsAdmin(admin.ModelAdmin):
list_display = ('title', )
inlines = (TabularTagInline,)
admin.site.register(Blog, BlogAdmin)
admin.site.register(Tag, TagAdmin)
Change History (3)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
sorry.
admin.site.register(Blog, BlogAdmin) should be admin.site.register(News, NewsAdmin).
comment:3 by , 12 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
admin.site.register(Blog, BlogAdmin) should be admin.site.register(News, BlogAdmin).