ankit
ankit

Reputation: 1529

'dict' object has no attribute 'filter' in django

I have created a class based view

class MyLibrary(generic.DetailView):

    context_object_name = 'data'

    def get_template_names(self):
        request = self.request
        template_name = 'my_library.html'
        return [template_name]

    def get_queryset(self):
        request = self.request
        user = request.user
        context = {}
        mainData = []
        userIssuedBooks = BooksIssued.objects.filter(user=user)
        print(userIssuedBooks)
        if user.is_authenticated():
            context['issuedBooks'] = userIssuedBooks
        return context

I am getting following error when the view is getting called

Internal Server Error: /mylibrary/1/admin
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 149, 
in get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Python34\lib\site-packages\django\core\handlers\base.py", line 147,     in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python34\lib\site-packages\django\contrib\auth\decorators.py", line 2
3, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\views\generic\base.py", line 68,     in view
return self.dispatch(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\views\generic\base.py", line 88, in
dispatch
return handler(request, *args, **kwargs)
File "C:\Python34\lib\site-packages\django\views\generic\detail.py", line   117,
in get
self.object = self.get_object()
File "C:\Python34\lib\site-packages\django\views\generic\detail.py", line 38,
in get_object
queryset = queryset.filter(pk=pk)
AttributeError: 'dict' object has no attribute 'filter'

I have no clue why this error is getting generated. Can someone help to find what is wrong here?

Upvotes: 0

Views: 3947

Answers (1)

Shang Wang
Shang Wang

Reputation: 25539

In django DetailView, get_queryset expects user to return a queryset(as the name implies) but you returned a dict context. You need to do your current stuff in get_context_data instead.

Django doc about adding extra context.

Upvotes: 6

Related Questions