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?
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.
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=[...]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With