Das Problem ist folgendes: Ich versuche, das Standard-Abfrageset zu ersetzen:
queryset: MyModel.objects.all()
auf meinem:
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
wenn ich das "queryset" entferne und nur "get_queryset" lasse, erscheint ein Fehler:
AssertionError:
base_name
Argument nicht angegeben und konnte den Namen nicht automatisch aus dem Viewset ermitteln, da es kein.queryset
Attribut.
Alles zusammen sieht so aus:
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 überschreiben Sie die Methode richtig?
In der neuesten DRF müssen Sie explizit base_name
In Ihrer Viewset-URL festlegen, wenn Sie queryset
nicht definiert haben.
So etwas sollte also gut tun:
router.register(r'my-model/', MyModelView, basename='MyModel')
Siehe dies: docs Hoffe es hilft.
Sie müssen der url.py-Datei ein Argument mit dem Namen base_name für die register-Methode hinzufügen, wie den folgenden Code in url.py:
"In url.py"
.
.
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'my-model/' , MyModelView , base_name='MyModel')
urlpattern=[...]