#23616: 'GenericRel' object has no attribute 'get_related_field'
-------------------------------------+-------------------------------------
     Reporter:  ranjur               |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:                       |                  Version:  1.7
  contrib.contenttypes               |               Resolution:
     Severity:  Normal               |             Triage Stage:
     Keywords:  GenericRel, django   |  Unreviewed
  1.7, admin, get_related_field,     |      Needs documentation:  0
  GenericRelation                    |  Patch needs improvement:  0
    Has patch:  0                    |                    UI/UX:  0
  Needs tests:  0                    |
Easy pickings:  0                    |
-------------------------------------+-------------------------------------
Changes (by ranjur):

 * needs_better_patch:   => 0
 * needs_tests:   => 0
 * needs_docs:   => 0


Old description:

> I have a model:
> #models.py
> class TaggedItem(models.Model):
>     tag = models.SlugField()
>     content_type = models.ForeignKey(ContentType)
>     object_id = models.PositiveIntegerField()
>     content_object = GenericForeignKey('content_type', 'object_id')
>
>     def __str__(self):              # __unicode__ on Python 2
>         return self.tag
>
> And model with GenericRelation
> class Bookmark(models.Model):
>     url = models.URLField()
>     tags = GenericRelation(TaggedItem)
>

> #admin.py
> class BookmarkAdmin(admin.ModelAdmin):
>     list_filter = ('tags__tag')
>
> admin.site.register(models.Bookmark, BookmarkAdmin)
>
> It will list all the `tag` in the filter, but when I try to filter it
> throws error `'GenericRel' object has no attribute 'get_related_field'`
>
> Full stack:
> {{{
> AttributeError at /admin/app/bookmark
> 'GenericRel' object has no attribute 'get_related_field'
> Request Method: GET
> Request URL:
> http://127.0.0.1:8000/admin/app/bookmark/?q=&tags__tag__id__exact=1
> Django Version: 1.7
> Exception Type: AttributeError
> Exception Value:
> 'GenericRel' object has no attribute 'get_related_field'
> Exception Location:     /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/options.py in lookup_allowed, line 416
> Python Executable:      /home/user/virtual/test/bin/python
> Python Version: 2.7.6
> Python Path:
> ['/home/user/projects/ptest',
>  '/home/user/virtual/test/local/lib/python2.7/site-
> packages/Pillow-2.5.1-py2.7-linux-x86_64.egg',
>  '/home/user/virtual/test/src/cmsplugin-bootstrap-carousel',
>  '/home/user/virtual/test/src/cmsplugin-contact',
>  '/home/user/virtual/test/src/django-faq',
>  '/home/user/virtual/test/src/python-varnish',
>  '/home/user/virtual/test/src/cmsplugin-text-ng',
>  '/home/user/virtual/test/src/django-balancer',
>  '/home/user/virtual/test/src/django-nose',
>  '/home/user/virtual/test/lib/python2.7',
>  '/home/user/virtual/test/lib/python2.7/plat-x86_64-linux-gnu',
>  '/home/user/virtual/test/lib/python2.7/lib-tk',
>  '/home/user/virtual/test/lib/python2.7/lib-old',
>  '/home/user/virtual/test/lib/python2.7/lib-dynload',
>  '/usr/lib/python2.7',
>  '/usr/lib/python2.7/plat-x86_64-linux-gnu',
>  '/usr/lib/python2.7/lib-tk',
>  '/home/user/virtual/test/local/lib/python2.7/site-packages',
>  '/home/user/virtual/test/local/lib/python2.7/site-packages/PIL',
>  '/home/user/virtual/test/local/lib/python2.7/site-
> packages/newrelic-2.28.0.26',
>  '/home/user/projects/y1/test']
> Server time:    Wed, 8 Oct 2014 13:28:38 +0800
> Traceback Switch to copy-and-paste view
>
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/core/handlers/base.py in get_response
>                     response = wrapped_callback(request, *callback_args,
> **callback_kwargs) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/options.py in wrapper
>                 return self.admin_site.admin_view(view)(*args, **kwargs)
> ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/utils/decorators.py in _wrapped_view
>                     response = view_func(request, *args, **kwargs) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/views/decorators/cache.py in _wrapped_view_func
>         response = view_func(request, *args, **kwargs) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/sites.py in inner
>             return view(request, *args, **kwargs) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/utils/decorators.py in _wrapper
>             return bound_func(*args, **kwargs) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/utils/decorators.py in _wrapped_view
>                     response = view_func(request, *args, **kwargs) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/utils/decorators.py in bound_func
>                 return func.__get__(self, type(self))(*args2, **kwargs2)
> ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/options.py in changelist_view
>                 self.list_max_show_all, self.list_editable, self) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/views/main.py in __init__
>         self.queryset = self.get_queryset(request) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/views/main.py in get_queryset
>          filters_use_distinct) = self.get_filters(request) ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/views/main.py in get_filters
>             if not self.model_admin.lookup_allowed(key, value): ...
> ▶ Local vars
> /home/user/virtual/test/local/lib/python2.7/site-
> packages/django/contrib/admin/options.py in lookup_allowed
>                 rel_name = field.rel.get_related_field().name ...
> ▶ Local vars
>
> }}}

New description:

 I have a model:
 #models.py
 {{{
 class TaggedItem(models.Model):
     tag = models.SlugField()
     content_type = models.ForeignKey(ContentType)
     object_id = models.PositiveIntegerField()
     content_object = GenericForeignKey('content_type', 'object_id')

     def __str__(self):              # __unicode__ on Python 2
         return self.tag

 # And model with GenericRelation
 class Bookmark(models.Model):
     url = models.URLField()
     tags = GenericRelation(TaggedItem)

 }}}
 #admin.py
 {{{
 class BookmarkAdmin(admin.ModelAdmin):
     list_filter = ('tags__tag')

 admin.site.register(models.Bookmark, BookmarkAdmin)
 }}}
 It will list all the `tag` in the filter, but when I try to filter it
 throws error `'GenericRel' object has no attribute 'get_related_field'`

 Full stack:
 {{{
 AttributeError at /admin/app/bookmark
 'GenericRel' object has no attribute 'get_related_field'
 Request Method: GET
 Request URL:
 http://127.0.0.1:8000/admin/app/bookmark/?q=&tags__tag__id__exact=1
 Django Version: 1.7
 Exception Type: AttributeError
 Exception Value:
 'GenericRel' object has no attribute 'get_related_field'
 Exception Location:     /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/options.py in lookup_allowed, line 416
 Python Executable:      /home/user/virtual/test/bin/python
 Python Version: 2.7.6
 Python Path:
 ['/home/user/projects/ptest',
  '/home/user/virtual/test/local/lib/python2.7/site-
 packages/Pillow-2.5.1-py2.7-linux-x86_64.egg',
  '/home/user/virtual/test/src/cmsplugin-bootstrap-carousel',
  '/home/user/virtual/test/src/cmsplugin-contact',
  '/home/user/virtual/test/src/django-faq',
  '/home/user/virtual/test/src/python-varnish',
  '/home/user/virtual/test/src/cmsplugin-text-ng',
  '/home/user/virtual/test/src/django-balancer',
  '/home/user/virtual/test/src/django-nose',
  '/home/user/virtual/test/lib/python2.7',
  '/home/user/virtual/test/lib/python2.7/plat-x86_64-linux-gnu',
  '/home/user/virtual/test/lib/python2.7/lib-tk',
  '/home/user/virtual/test/lib/python2.7/lib-old',
  '/home/user/virtual/test/lib/python2.7/lib-dynload',
  '/usr/lib/python2.7',
  '/usr/lib/python2.7/plat-x86_64-linux-gnu',
  '/usr/lib/python2.7/lib-tk',
  '/home/user/virtual/test/local/lib/python2.7/site-packages',
  '/home/user/virtual/test/local/lib/python2.7/site-packages/PIL',
  '/home/user/virtual/test/local/lib/python2.7/site-
 packages/newrelic-2.28.0.26',
  '/home/user/projects/y1/test']
 Server time:    Wed, 8 Oct 2014 13:28:38 +0800
 Traceback Switch to copy-and-paste view

 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/core/handlers/base.py in get_response
                     response = wrapped_callback(request, *callback_args,
 **callback_kwargs) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/options.py in wrapper
                 return self.admin_site.admin_view(view)(*args, **kwargs)
 ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/utils/decorators.py in _wrapped_view
                     response = view_func(request, *args, **kwargs) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/views/decorators/cache.py in _wrapped_view_func
         response = view_func(request, *args, **kwargs) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/sites.py in inner
             return view(request, *args, **kwargs) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/utils/decorators.py in _wrapper
             return bound_func(*args, **kwargs) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/utils/decorators.py in _wrapped_view
                     response = view_func(request, *args, **kwargs) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/utils/decorators.py in bound_func
                 return func.__get__(self, type(self))(*args2, **kwargs2)
 ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/options.py in changelist_view
                 self.list_max_show_all, self.list_editable, self) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/views/main.py in __init__
         self.queryset = self.get_queryset(request) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/views/main.py in get_queryset
          filters_use_distinct) = self.get_filters(request) ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/views/main.py in get_filters
             if not self.model_admin.lookup_allowed(key, value): ...
 ▶ Local vars
 /home/user/virtual/test/local/lib/python2.7/site-
 packages/django/contrib/admin/options.py in lookup_allowed
                 rel_name = field.rel.get_related_field().name ...
 ▶ Local vars

 }}}

--

--
Ticket URL: <https://code.djangoproject.com/ticket/23616#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/064.63413a8f543cfe72ff23b825c7d49207%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to