﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24852	Related Field got invalid lookup: offer_ptr	Sergey Gornostaev	nobody	"I have this models in my project:

{{{#!python
class Category(MPTTModel):
    parent = TreeForeignKey('self', verbose_name=_(""Parent""), null=True, blank=True, related_name='children')
    name = models.CharField(_(""Name""), max_length=50)


class Offer(models.Model):
    category = TreeForeignKey(Category, verbose_name=_(""Category""))
    title = models.CharField(_(""Name""), max_length=100)


class Goods(Offer):
    recommended_goods = models.ManyToManyField('self', verbose_name=_(""Recommended goods""), related_name='+', blank=True, null=True)
    recommended_categories = TreeManyToManyField(Category, verbose_name=_(""Recommended categories""), related_name='+', blank=True, null=True)


class Promotion(models.Model):
    title = models.CharField(_('Title'), max_length=50)
    description = models.TextField(_(""Description""))
    active_from = models.DateTimeField(_(""Active from date""))
    active_till = models.DateTimeField(_(""Active till date""))
    promotional_categories = models.ManyToManyField(Category, verbose_name=_(""Categories""), related_name='+', blank=True, null=True)
    promotional_items = models.ManyToManyField(Offer, verbose_name=_(""Goods""), related_name='+', blank=True, null=True)
}}}

When I try to execute **goods.recommended_categories.all()**, it causes an error ""Related Field got invalid lookup: offer_ptr""

It began after the field promotional_categories has been added to the Promotion model. But how that can affect on querying Categories from m2m relation in Goods?

Traceback:
{{{
Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/shop/offer/23000/

Django Version: 1.7.8
Python Version: 2.7.5
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'suit',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'django.contrib.sitemaps',
 'django.contrib.humanize',
 'django.contrib.flatpages',
 'django.contrib.redirects',
 'reversion',
 'djangosphinx',
 'registration',
 'mptt',
 'django_mptt_admin',
 'compressor',
 'django_geoip',
 'django_select2',
 'accounts',
 'newslines',
 'vacancies',
 'faq',
 'articles',
 'storage',
 'gallery',
 'banners',
 'portfolio',
 'polls',
 'shop.catalog',
 'shop.basket',
 'shop.reviews',
 'promotions',
 'synchronizer',
 'comments',
 'debug_toolbar')
Installed Middleware:
('debug_toolbar.middleware.DebugToolbarMiddleware',
 'django.middleware.cache.UpdateCacheMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.sites.middleware.CurrentSiteMiddleware',
 'core.middleware.MaintenanceMiddleware',
 'core.middleware.ProtectAdminSiteMiddleware',
 'django.contrib.admindocs.middleware.XViewMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.middleware.cache.FetchFromCacheMiddleware')


Traceback:
File ""C:\Python\lib\site-packages\django\core\handlers\base.py"" in get_response
  104.                     response = middleware_method(request, callback, callback_args, callback_kwargs)
File ""C:\Python\lib\site-packages\debug_toolbar\middleware.py"" in process_view
  77.             response = panel.process_view(request, view_func, view_args, view_kwargs)
File ""C:\Python\lib\site-packages\debug_toolbar\panels\profiling.py"" in process_view
  134.         return self.profiler.runcall(view_func, *args, **view_kwargs)
File ""C:\Python\lib\cProfile.py"" in runcall
  149.             return func(*args, **kw)
File ""C:\Python\lib\site-packages\django\views\decorators\http.py"" in inner
  41.             return func(request, *args, **kwargs)
File ""Z:\Projects\terminal-dev\shop\catalog\views.py"" in show_offer
  484.                     for recommendation in goods.recommended_categories.all():
File ""C:\Python\lib\site-packages\django\db\models\manager.py"" in all
  191.         return self.get_queryset()
File ""C:\Python\lib\site-packages\django\db\models\fields\related.py"" in get_queryset
  885.                 return qs._next_is_sticky().filter(**self.core_filters)
File ""C:\Python\lib\site-packages\django\db\models\query.py"" in filter
  691.         return self._filter_or_exclude(False, *args, **kwargs)
File ""C:\Python\lib\site-packages\django\db\models\query.py"" in _filter_or_exclude
  709.             clone.query.add_q(Q(*args, **kwargs))
File ""C:\Python\lib\site-packages\django\db\models\sql\query.py"" in add_q
  1331.         clause, require_inner = self._add_q(where_part, self.used_aliases)
File ""C:\Python\lib\site-packages\django\db\models\sql\query.py"" in _add_q
  1358.                     current_negated=current_negated, connector=connector)
File ""C:\Python\lib\site-packages\django\db\models\sql\query.py"" in build_filter
  1225.                                                     lookups, value)
File ""C:\Python\lib\site-packages\django\db\models\fields\related.py"" in get_lookup_constraint
  1577.             raise TypeError('Related Field got invalid lookup: %s' % lookup_type)

Exception Type: TypeError at /shop/offer/23000/
Exception Value: Related Field got invalid lookup: offer_ptr
}}}

I was confused by this lines displayed in traceback interactive view:
{{{
C:\Python\lib\site-packages\django\db\models\sql\query.py in _add_q:
1356.                child_clause, needed_inner = self.build_filter(
1357.                    child, can_reuse=used_aliases, branch_negated=branch_negated,
1358.                    current_negated=current_negated, connector=connector) 

Local vars:
used_aliases    set([u'catalog_category',
                   u'promotions_promotion',
                   u'promotions_promotion_promotional_categories'])
child           (u'+__offer_ptr', 23000)
}}}

What's used_aliases?"	Bug	closed	Database layer (models, ORM)	1.7	Normal	needsinfo			Unreviewed	0	0	0	0	0	0
