#26819: Using a ArrayField on Meta.unique_together throws "unhashable type: 'list'" on validate_unique method ----------------------------------+------------------------------------ Reporter: gleber-diniz | Owner: PREM1980 Type: Bug | Status: assigned Component: contrib.postgres | Version: 1.9 Severity: Normal | Resolution: Keywords: | Triage Stage: Accepted Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 ----------------------------------+------------------------------------
Old description: > It happens on a second save (when there is already data to be validated) > > On this line: "if row_data in seen_data:", because row_data contains a > list and seen_data is a set (row_data: (1, [1, 1]) / seen_data: set()) > > Example to reproduce: > > models: > {{{#!python > class Map(models.Model): > name = models.CharField(_('name'), max_length=128) > > class MapSpot(models.Model): > map = models.ForeignKey('body.Map', related_name='spots') > position = ArrayField(models.IntegerField(), size=2) > > class Meta: > unique_together = [('map', 'position')] > }}} > > admin: > {{{#!python > class MapSpotInline(admin.TabularInline): > model = MapSpot > extra = 0 > > @admin.register(Map) > class MapAdmin(admin.ModelAdmin): > inlines = [MapSpotInline] > }}} New description: -- Comment (by PREM1980): As you mentioned, implemented fix in validate_unique() method. The above code fixes the issue and all the unit tests got passed. The only problem is Im not sure how to write the test case. It needs to be simulated as if a user creates a form in the html page. Do you have any pointers for testing similar condition? row_data = tuple(d._get_pk_val() if hasattr(d, '_get_pk_val') else tuple(d) if type(d) is list else d for d in row_data) -- Ticket URL: <https://code.djangoproject.com/ticket/26819#comment:11> Django <https://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 unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/070.ce53adced9e91e47510dd23e6b81446a%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.