On Mar 22, 12:19 pm, James <goo...@hostitlocal.co.uk> wrote: > Hi, > > I am struggling to get a piece of code working. > I've looked at it too much and now can't see what im doing wrong. > > Anyone have any ideas? The error is as follows: > Type Error > string indices must be integers - (if ids['m'['manufacturer__id']]
"'m'['manufacturer__id']" is trying to to an index lookup on string "'m'" using string "'manufacturer__id'" as index - which can't work, since strings can (of course) only be indexed by integers > is > not m['manufacturer__id']: ) > Code: > > tmp_manufacturers = Product.objects.filter(category=category).values( > 'manufacturer__title', 'manufacturer__slug', > 'manufacturer__id' > ).distinct() > > manufacturers = {} > for m in tmp_manufacturers: > ids = {} > > if ids['m'['manufacturer__title']] is not > m['manufacturer__title']: First error is the use of quotes around "m" - this should read "ids[m['manufacturer__title']]". Now there are two other errors in this line: 1/ you should NOT use the identity operator to test for equality - IOW, you want to replace 'is' with '==' (or, in this case, 'is not' with '!=') 2/ if the 'ids' dict doesn't yet have a value set for m['manufacturer__title'], you'll get a KeyError. > ids.append(m['manufacturer__title']) Looks like you're confusing dicts with lists.... dicts don't have an "append" method. > manufacturers.append({ > 'title': m['manufacturer__title'], > 'slug': m['manufacturer__slug'], > 'id': m['manufacturer__id'], > 'total_products': Product.objects.filter( > category=category, > manufacturer__slug=m['manufacturer__slug'] > ).count() > }) I don't know what your models looks like, but there's something wrong IMHO - if there's to be a one2many or many2many relationship between Products and Manufacturer, then it would better be explicit (using a Model.ForeignKey or Model.ManyToManyField), and done on the manufacturer *id*, not on the slug. This may also save you (and your computer) some useless work... > Also, does anyone have any decent documentation on arrays? Arrays ??? This is not PHP, this is Python. Look for "list" and "dict" in the FineManual (I mean, the fine *Python* manual). FWIW, do yourself a favour and learn Python - at least do the official intro tutorial. You just can't hope to do anything good in Django if you don't know at least the most basic Python builtin types and operators. -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.