Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

base_name argument not specified, and could not automatically determine the name from the viewset, as it does not have a .queryset attribute

I'm trying to replace the standard queryset:

queryset: MyModel.objects.all()

on my:

def get_queryset(self, username=None):
    if username is not None:
        user = UserModel.objects.get(username=username)
        queryset = MyModel.filter(author=user)
        return queryset
    else:
        queryset = MyModel.objects.all()
        return queryset
     

when I remove the "queryset", and leave only "get_queryset", an error appears:

AssertionError: base_name argument not specified, and could not automatically determine the name from the viewset, as it does not have a .queryset attribute.

All together looks so:

class MyModelView(viewsets.ModelViewSet):

permissions_classes = (permissions.IsAuthenticated,)
serializer_class = MyModelleSerializer

def get_queryset(self, username=None):
    if username is not None:
        user = UserModel.objects.get(username=username)
        queryset = MyModel.filter(author=user)
        return queryset
    else:
        queryset = MyModel.objects.all()
        return queryset
    
lookup_field = 'username'
lookup_value_regex = '[a-zA-Z0-9$&(._)\-]+'

So how to override method correctly?

like image 267
woe-dev. Avatar asked Jan 31 '18 18:01

woe-dev.


2 Answers

In the latest DRF, you need to explicitly set base_name in your viewset url if you don't have queryset defined.

So, something like this should do good:

router.register(r'my-model/', MyModelView, basename='MyModel')

See this: docs Hope it helps.

like image 185
Jahongir Rahmonov Avatar answered Nov 12 '22 15:11

Jahongir Rahmonov


You must add an argument called basename for the register method in the url.py file, Like the following code in url.py :

"In url.py"
    
    
...
    
from rest_framework import routers
       
router = routers.DefaultRouter()
router.register(r'my-model/' , MyModelView , basename='MyModel')  
urlpattern=[...]     
like image 10
Omid Ostovari Avatar answered Nov 12 '22 14:11

Omid Ostovari