#24852 closed Bug (needsinfo)
Related Field got invalid lookup: offer_ptr
| Reported by: | Sergey Gornostaev | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 1.7 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I have this models in my project:
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?
Change History (3)
follow-up: 3 comment:1 by , 10 years ago
comment:2 by , 10 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
Please reopen if you can reproduce on master after the fix Baptiste noted and also without django-mptt. Thanks!
I wonder if this could be the same bug as #24505.
What happens if you change all the
related_name='+'to1+,2+,3+, ... (so that there aren't two identical related_name)?Thanks.