This will be fixed in next minor version of Django 1.6.

 -Anssi

On Friday, November 22, 2013 2:52:29 AM UTC+2, Rhett G. wrote:
>
> Trying to migrate our Django 1.5 application to 1.6. I hit what I think is 
> a bug, or at the very least very confusing behavior. 
> Imagine some models like the following:
>
>   class Img(Model):
>     uuid = CharField()
>
>
>   class ImgResolutions(Model):
>     img = ForeignKey(Img, related_name='resolutions')
>     url = CharField()
>
>
>   # Lots of things have images, this is just one, so I want to leave off 
> the related name, just as is documented in
>   # 
> https://docs.djangoproject.com/en/1.6/ref/models/fields/#django.db.models.ForeignKey.related_name<https://www.google.com/url?q=https%3A%2F%2Fdocs.djangoproject.com%2Fen%2F1.6%2Fref%2Fmodels%2Ffields%2F%23django.db.models.ForeignKey.related_name&sa=D&sntz=1&usg=AFQjCNHzaxgcSR3ToBkDCE-mo_EBOy5W7g>
>   class Place(Model):
>     detail_img = ForeignKey(Img, related_name='+')
>     icon_img = ForeignKey(Img, related_name='+')
>
>
> Now, when I do a query like this:
>
>     places = Place.objects.filter(.. whatever 
> ..).prefetch_related('detail_img__resolutions')
>
> I get something like:
>
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/query.py",
>  
> line 96, in __iter__
>     self._fetch_all()
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/query.py",
>  
> line 856, in _fetch_all
>     self._prefetch_related_objects()
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/query.py",
>  
> line 517, in _prefetch_related_objects
>     prefetch_related_objects(self._result_cache, 
> self._prefetch_related_lookups)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/query.py",
>  
> line 1598, in prefetch_related_objects
>     obj_list, additional_prl = prefetch_one_level(obj_list, prefetcher, 
> attr)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/query.py",
>  
> line 1697, in prefetch_one_level
>     prefetcher.get_prefetch_queryset(instances)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/fields/related.py",
>  
> line 277, in get_prefetch_queryset
>     qs = self.get_queryset(instance=instances[0]).filter(**query)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/query.py",
>  
> line 590, in filter
>     return self._filter_or_exclude(False, *args, **kwargs)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/query.py",
>  
> line 608, in _filter_or_exclude
>     clone.query.add_q(Q(*args, **kwargs))
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py",
>  
> line 1202, in add_q
>     clause = self._add_q(where_part, used_aliases)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py",
>  
> line 1236, in _add_q
>     current_negated=current_negated)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py",
>  
> line 1101, in build_filter
>     allow_explicit_fk=True)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py",
>  
> line 1356, in setup_joins
>     names, opts, allow_many, allow_explicit_fk)
>   File 
> "/postmates/virtualenv.d/postal-main/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py",
>  
> line 1279, in names_to_path
>     "Choices are: %s" % (name, ", ".join(available)))
> FieldError: Cannot resolve keyword '+' into field. Choices are: 
> date_created, date_updated, deleted, id, resolutions, uuid
>
> From what I can tell, this has something to do with the addition of 
> related_query_name.
> For some reason, it's trying to build a filter that looks like '+_in', 
> because of L276 in django/db/models/fields/related.py :
>
>     query = {'%s__in' % self.field.related_query_name(): instances}
>
> I think it's trying to build a query like "Img.place in [place list]" 
>
> Am I doing something wrong or is this a bug?
>
> Thanks,
>
> Rhett
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/186ed223-0010-456c-a723-087a9fcad12d%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to