MattBroach / DjangoRestMultipleModels

View (and mixin) for serializing multiple models or querysets in Django Rest Framework
MIT License
549 stars 67 forks source link

AssertionError: DataViewSet.get_queryset() returned None #57

Open patilkrunal opened 2 years ago

patilkrunal commented 2 years ago

DataViewSet.get_queryset() returned None when using ObjectMultipleModelAPIViewSet. basename given, even router converted to path function. But still same issue

Getting this issue in django 3.0.14 and django-rest-multiple-models==2.1.3. Can I get some help here?

MattBroach commented 2 years ago

It's hard to diagnose the issue without a little more information. If you could provide either the full traceback and/or a code sample that reproduces the issue, I might be able to help. Also, knowing what rest_framework version you're using would be helpful.

patilkrunal commented 2 years ago

djangorestframework==3.12.4

So I have few models & instead of giving single json responses to frontend which will only make get queries to django backend I want to club all models data into single response as a http://127.0.0.1:8000/api/allapisdata/ and send this when frontend is on homepage. But when I override my custom AllApiDataViewSet with ObjectMultipleModelAPIViewSet it gives this traceback. I saw the code and in DjangoRestMultipleModels/drf_multiple_model/viewsets.py we have get_queryset() method which returns None.
So shall I override this method? If yes then how? I will be obliged if you could help. urls.py

from rest_framework import routers
router = routers.DefaultRouter()
router.register(r"allapisdata", AllApiDataViewSet, basename="allapisdata")

Error Trace

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/api/allapisdata/

Django Version: 3.0.14
Python Version: 3.8.10
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'corsheaders',
 'ckeditor',
 'drf_multiple_model',
 'home']
Installed Middleware:
['corsheaders.middleware.CorsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'whitenoise.middleware.WhiteNoiseMiddleware']

Traceback (most recent call last):
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/viewsets.py", line 125, in view
    return self.dispatch(request, *args, **kwargs)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/views.py", line 497, in dispatch
    self.initial(request, *args, **kwargs)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/views.py", line 415, in initial
    self.check_permissions(request)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/views.py", line 332, in check_permissions
    if not permission.has_permission(request, self):
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/permissions.py", line 229, in has_permission
    queryset = self._queryset(view)
  File "/media/main/Data/Projects/AIT_ECELL/aitecell/env/lib/python3.8/site-packages/rest_framework/permissions.py", line 213, in _queryset
    assert queryset is not None, (

Exception Type: AssertionError at /api/allapisdata/
Exception Value: AllApiDataViewSet.get_queryset() returned None
Ahmad-Wali-Sh commented 1 year ago

Hi, I know its too late, but I have got something. you need to change the source file "viewsets.py" of Package. like

from rest_framework.viewsets import GenericViewSet

from drf_multiple_model.mixins import FlatMultipleModelMixin, ObjectMultipleModelMixin

class FlatMultipleModelAPIViewSet(FlatMultipleModelMixin, GenericViewSet): def get_queryset(self): return self

class ObjectMultipleModelAPIViewSet(ObjectMultipleModelMixin, GenericViewSet): def get_queryset(self): return self

and then. in your view.py:

add at least one of models. like: class YourView(FlatMultipleModelViewSet): querylist = [ {...} ] model = YourModel

give it a try.