The crash is probably a bug: https://code.djangoproject.com/ticket/26261

On Friday, August 14, 2015 at 5:01:30 PM UTC-4, Daniel H wrote:
>
> 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 https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/48d989fe-a97c-4792-bb80-7dd8fa767915%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to