On May 26, 10:26 pm, Chris Seberino <cseber...@gmail.com> wrote:
> I have Homework objects that are related to Course objects for a
> school related Django app.  I can access Course and Homework objects
> but there is one Homework query at the end of this email that bombs
> and I don't know why.
>
> ===================================================================
> First I'll show a few working queries to show that everything is sane
> and working....
> ===================================================================
>
> >>> Course.objects.filter(subject="Algebra 1", year=2011, session="Fall")
>
> [<Course: Course object>]
>
> >>> Course.objects.filter(year=2011)
>
> [<Course: Course object>, <Course: Course object>, <Course: Course
> object>, <Course: Course object>, <Course: Course object>, <Course:
> Course object>, <Course: Course object>, <Course: Course object>,
> <Course: Course object>, <Course: Course object>]
>
> >>> course = Course.objects.filter(year=2011)[0]
> >>> Homework.objects.filter(course=course)
>
> [<Homework: Homework object>, <Homework: Homework object>, ... etc.]
> (truncated by me)
>
> >>> Homework.objects.filter(course__session="Fall")
>
> [<Homework: Homework object>, <Homework: Homework object>, ... etc.]
> (truncated by me)
>
> ====================================================================
> Here is the mystery one that bombs and I don't know why:
> ====================================================================
>
> >>> Homework.objects.filter(course__year=2011)
>
> Traceback (most recent call last):
>   File "<console>", line 1, in <module>
>   File "/usr/lib/pymodules/python2.6/django/db/models/manager.py",
> line 141, in filter
>     return self.get_query_set().filter(*args, **kwargs)
>   File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line
> 550, in filter
>     return self._filter_or_exclude(False, *args, **kwargs)
>   File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line
> 568, in _filter_or_exclude
>     clone.query.add_q(Q(*args, **kwargs))
>   File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py",
> line 1128, in add_q
>     can_reuse=used_aliases)
>   File "/usr/lib/pymodules/python2.6/django/db/models/sql/query.py",
> line 1071, in add_filter
>     connector)
>   File "/usr/lib/pymodules/python2.6/django/db/models/sql/where.py",
> line 66, in add
>     value = obj.prepare(lookup_type, value)
>   File "/usr/lib/pymodules/python2.6/django/db/models/sql/where.py",
> line 299, in prepare
>     return self.field.get_prep_lookup(lookup_type, value)
>   File "/usr/lib/pymodules/python2.6/django/db/models/fields/
> related.py", line 139, in get_prep_lookup
>     raise TypeError("Related Field has invalid lookup: %s" %
> lookup_type)
> TypeError: Related Field has invalid lookup: year

Probably what happens here is that the 'year' part of the course__year
lookup is mistaken for a date lookup 'year' (you could do a query like
datetimefield__year=2011).

What version of Django are you using? 1.4 should contain a fix for
this: https://code.djangoproject.com/ticket/11670. If you can't
upgrade, it might be possible that course__year__exact=2011 will work.
Not sure though.

 - Anssi

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@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.

Reply via email to