Я пытаюсь получить доступ к ссылке 'http://127.0.0.1:8000/products/2', в которой я использую общее представление (DetailsView), и в этом представлении я хочу использовать свой собственный менеджер моделей. Но я получаю сообщение об ошибке AttributeError: у объекта 'Product' нет атрибута 'filter'.
Я использую Python версии 3.8 и django версии 2.2.6
# ModelManager
#-----------------------------------------------
class ProductManager(models.Manager):
def get_by_id(self,id):
qs = self.get_queryset().filter(id=id)
if qs.count() == 1:
return qs.first()
return None
# View
#-----------------------------------------------
class ProductDetailView(DetailView):
# queryset = Product.objects.all( )
def get_queryset(self, *args, **kwargs):
request = self.request
pk = self.kwargs.get("pk")
instance = Product.objects.get_by_id(pk)
if instance is None:
raise Http404("Product Couldn't be found")
return instance
# Ошибка
Internal Server Error: /products/2
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/views/generic/base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/views/generic/detail.py", line 106, in get
self.object = self.get_object()
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/views/generic/detail.py", line 36, in get_object
queryset = queryset.filter(pk=pk)
AttributeError: 'Product' object has no attribute 'filter'
[22/Oct/2019 18:51:56] "GET /products/2 HTTP/1.1" 500 75133