Mein Ziel ist es, einen Abschnitt "Empfohlene Produkte" auf meiner E-Commerce-Website zu erstellen, wenn Sie auf eine einzelne Produktseite zugreifen.Verwandte Objekte über Tags in Django abrufen
Ich habe ein sereis von Produkten, die mehrere benutzerdefinierte Tags im Admin haben. Das Kennzeichnungssystem ist eine Kombination aus django-taggit
und modelcluster
, wie in der Wagtail-CMS docs beschrieben.
Ich versuche es so zu machen, dass Django beim Zugriff auf eine Produktseite alle anderen Produkte mit den gleichen/ähnlichen Tags betrachtet und im Abschnitt "Empfohlene Produkte" basierend auf der Anzahl der identischen Tags auflistet. Die django-taggit
Dokumente scheinen diese Notwendigkeit in ihrer API mit der get_related()
Funktion, wie their docs zu adressieren.
Ich kämpfe um das funktioniert aber wie ich weiterhin auf Fehler, die neueste sein Exception Type: KeyError at /categories/test-category/test-product/ Exception Value: (15,)
. Hier ist mein Code so weit:
class ProductTag(TaggedItemBase):
content_object = ParentalKey('Product', related_name='tagged_items')
class Product(Page):
...
tags = ClusterTaggableManager(through=ProductTag, blank=True)
def get_context(self, request):
context = super(Product, self).get_context(request)
current_tags = self.tags
related_products = Product.objects.filter(current_tags.similar_objects())
context['related_products'] = related_products
return context
EDIT | Voll Fehler Zurückverfolgungs unter:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/categories/test-category/test-product/
Django Version: 1.11.5
Python Version: 3.5.2
Installed Applications:
['home',
'search',
'products',
'wagtail.wagtailforms',
'wagtail.wagtailredirects',
'wagtail.wagtailembeds',
'wagtail.wagtailsites',
'wagtail.wagtailusers',
'wagtail.wagtailsnippets',
'wagtail.wagtaildocs',
'wagtail.wagtailimages',
'wagtail.wagtailsearch',
'wagtail.wagtailadmin',
'wagtail.wagtailcore',
'modelcluster',
'taggit',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'wagtail.wagtailcore.middleware.SiteMiddleware',
'wagtail.wagtailredirects.middleware.RedirectMiddleware']
Traceback:
File "C:\Users\ddl_9\Envs\fstvl\lib\site-packages\django\core\handlers\exception.py" in inner
41. response = get_response(request)
File "C:\Users\ddl_9\Envs\fstvl\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Users\ddl_9\Envs\fstvl\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\ddl_9\Envs\fstvl\lib\site-packages\wagtail\wagtailcore\views.py" in serve
26. return page.serve(request, *args, **kwargs)
File "C:\Users\ddl_9\Envs\fstvl\lib\site-packages\wagtail\wagtailcore\models.py" in serve
773. self.get_context(request, *args, **kwargs)
File "C:\Users\ddl_9\Desktop\fstvl\products\models.py" in get_context
143. related_products = current_tags.similar_objects()
File "C:\Users\ddl_9\Envs\fstvl\lib\site-packages\taggit\utils.py" in inner
146. return func(self, *args, **kwargs)
File "C:\Users\ddl_9\Envs\fstvl\lib\site-packages\taggit\managers.py" in similar_objects
350. tuple(result[k] for k in lookup_keys)
Exception Type: KeyError at /categories/test-category/test-product/
Exception Value: (15,)
Wenn ich versuche, und auf andere Produktseiten ich die gleichen Fehler, nur mit einem anderen Ausnahmewert. Die Funktion erwartet einen Schlüssel von einem Diktat, aber aus irgendeinem Grund erhält sie stattdessen den Wert ... Könnte das ein Kompatibilitätsproblem mit dem Code sein?
Würde 'related_products = current_tags.similar_objects()' Ihnen die Liste der gewünschten 'Product' Objekte zurückgeben? Das Durchreichen von 'Product.objects.filter (...)' scheint keinen Zweck zu erfüllen (noch ist es eine gültige Syntax für die Methode 'filter'). – gasman
Das war, was ich mit meinem ersten Versuch versuchte - gibt mir immer noch den gleichen Fehler: 'Exception Typ: KeyError at/categories/Test-Kategorie/Test-Produkt/Exception Value: (15,)' und die Traceback führt zu ' tuple (result [k] für k in lookup_keys) '@gasman – DDiran
Bitte teilen Sie die volle Traceback - eine einzige Zeile Code sagt mir wirklich nichts. – gasman