Self.queryset или super.get_queryset() для пользовательского запроса?
Здесь я хочу переопределить мой набор квери для этого я должен получить набор квери по умолчанию с self.queryset
или super().get_queryset()
.
Какой способ лучше?
class MyViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.filter(value__gte=1).select_related("related")
serializer_class = Myserializer
def get_queryset(self):
user = self.request.user
qs = super().get_queryset() # OR qs = self.queryset
if not user.is_superuser:
qs = qs.filter(user=user)
return qs
ИЛИ
class MyViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = Myserializer
def get_queryset(self):
user = self.request.user
qs = MyModel.objects.filter(value__gte=1).select_related("related")
if not user.is_superuser:
qs = qs.filter(user=user)
return qs
Вы можете пойти обоими путями. Но если вы используете get_queryset
, я предлагаю исключить переменную queryset
, потому что это может запутать. Я считаю, что это будет немного более чистая версия второго варианта.
class MyViewSet(viewsets.ModelViewSet):
serializer_class = Myserializer
def get_queryset(self):
user = self.request.user
qs = MyModel.objects.filter(value__gte=1).select_related("related")
if not user.is_superuser:
qs = qs.filter(user=user)
return qs