Hi everyone.

I've been using django for almost a year now, but it's my first time 
posting here.

Anyway, I'm encountering an error which I think might be a bug. I've yet to 
try and replicate it as I thought posting here would be the better first 
step, as I might just be doing something incorrectly.

When I try a query with .exclude() on a table with a GenericForeignKey and 
a reverse Generic Relation on a different table, I get this:

AttributeError at /list

'GenericRelation' object has no attribute 'field'


Here is a mock up of my database structure:

class InternalOffer(models.Model):
    user = models.ForeignKey('User')
    status = models.CharField(max_length=64)
    (more offer data...)
    relation = GenericRelation(OfferJoin, related_query_name='offerquery')

class ExternalOffer(models.Model):
    user = models.ForeignKey('User')
    status = models.CharField(max_length=64)
    (more offer data...)
    relation = GenericRelation(OfferJoin, related_query_name='offerquery')

class OfferJoin(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    offer = GenericForeignKey('content_type', 'object_id')

I can filter fine, it's only the exclude that causes errors. Here is the 
code that causes the error:

offers = OfferCover.objects.filter(offerquery__user__id=request.user.id)
offers = offers.exclude(offerquery__status="Completed")

Here's the full callback:

Django Version: 1.8.2
Python Version: 2.7.6

Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in 
get_response
  132.                     response = wrapped_callback(request, 
*callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/auth/decorators.py" 
in _wrapped_view
  22.                 return view_func(request, *args, **kwargs)
File "/Users/path-to-project/project/views.py" in list
  136.     offers = offers.exclude(o__status="Completed")
File "/Library/Python/2.7/site-packages/django/db/models/query.py" in 
exclude
  686.         return self._filter_or_exclude(True, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/query.py" in 
_filter_or_exclude
  695.             clone.query.add_q(~Q(*args, **kwargs))
File "/Library/Python/2.7/site-packages/django/db/models/sql/query.py" in 
add_q
  1304.         clause, require_inner = self._add_q(where_part, 
self.used_aliases)
File "/Library/Python/2.7/site-packages/django/db/models/sql/query.py" in 
_add_q
  1332.                     allow_joins=allow_joins, split_subq=split_subq,
File "/Library/Python/2.7/site-packages/django/db/models/sql/query.py" in 
build_filter
  1180.                                       can_reuse, e.names_with_path)
File "/Library/Python/2.7/site-packages/django/db/models/sql/query.py" in 
split_exclude
  1562.         trimmed_prefix, contains_louter = 
query.trim_start(names_with_path)
File "/Library/Python/2.7/site-packages/django/db/models/sql/query.py" in 
trim_start
  1989.         join_field = path.join_field.field

Exception Type: AttributeError at /list
Exception Value: 'GenericRelation' object has no attribute 'field'

I've read the documentation multiple times and haven't come across anything 
usefull. I know that filtering GFKs alone won't work, but both filtering 
and excluding should work with the reverse Generic Relation.

Thanks!
- Daniel Harris

-- 
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/b44b0d43-2499-4075-8842-8c9fb76d3160%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to