Django: a get_queryset () le falta 1 argumento posicional requerido: ‘solicitud’

Estaba intentando crear una API utilizando el Marco de trabajo de REST para cargar un archivo en el servidor y mis códigos se encuentran a continuación.

Si tiene cualquier otro método fácil para hacer lo mismo, publique su código.

modelos.py

from django.db import models # Create your models here. class FileUploader(models.Model): file = models.FileField() name = models.CharField(max_length=100) #name is filename without extension version = models.IntegerField(default=0) upload_date = models.DateTimeField(auto_now=True, db_index=True) owner = models.ForeignKey('auth.User', related_name='uploaded_files') size = models.IntegerField(default=0) def __str__(self): return self.name 

serializers.py

 class FileUploaderSerializer(serializers.ModelSerializer): class Meta: model=FileUploader fields='__all__' read_only_fields = '__all__' def validate(self, validated_data): validated_data['owner'] = self.context['request'].user validated_data['name'] = os.path.splitext(validated_data['file'].name)[0] validated_data['size'] = validated_data['file'].size return validated_data def create(self,validated_data): return FileUploader.objects.create(**validated_data) 

vistas.py

 class FileUploaderViewSet(viewsets.ModelViewSet): serializer_class = FileUploaderSerializer parser_classes=(MultiPartParser,FormParser) def get_queryset(self,request, *args, **kwargs): qs = super(FileUploaderViewSet, self).get_queryset(self,request, *args, **kwargs) qs = qs.filter(owner=self.request.user) return qs 

urls.py

 from django.conf.urls import url from django.conf.urls import url,include from django.contrib import admin from rest_framework import routers from rest_framework.authtoken.views import obtain_auth_token from rest_framework.urlpatterns import format_suffix_patterns from webapp import views from webapp.views import( UserCreateAPIView, UserLoginAPIView, FileUploaderViewSet, ) router = routers.DefaultRouter() router.register(r'upload', views.FileUploaderViewSet,base_name='file-view') urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', include(router.urls)), #url(r'^upload/$',FileUploaderViewSet.as_view()), ] 

Mi requisito es que necesito cargar un archivo en el servidor y que se muestren los detalles del archivo cargado.

Este es el error que estoy recibiendo!

Ambiente:

Método de solicitud: GET URL de solicitud: http://127.0.0.1:8000/upload/

Versión de Django: 1.11.7 Versión de Python: 3.6.3 Aplicaciones instaladas: [‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django .contrib.messages ‘,’ django.contrib.staticfiles ‘,’ rest_framework ‘,’ webapp ‘] Middleware instalado: [‘ django.middleware.security.SecurityMiddleware ‘,’ django.contrib.sessions.middleware.SessionMiddleware ‘,’ django .middleware.common.CommonMiddleware ‘,’ django.middleware.csrf.CsrfViewMiddleware ‘,’ django.contrib.auth.middleware.AuthenticationMiddleware ‘,’ ” ” ” ” ” ” ” ” ” ” ” ” ‘ ‘]

Rastrear:

El archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ exception.py” en el interior 41. response = get_response (solicitud)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ base.py” en _get_response 187. response = self.process_exception_by_middleware (e, solicitud)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ base.py” en _get_response 185. response = wrapped_callback (solicitud, * callback_args, ** callback_kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ views \ decorators \ csrf.py” enrapped_view 58. return view_func (* args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ viewsets.py” en la vista 90. return self.dispatch (solicitud, * args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en el envío 489. response = self.handle_exception (exc)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en handle_exception 449. self.raise_uncaught_exception (exc)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en el envío 486. response = handler (solicitud, * args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ mixins.py” en la lista 40. queryset = self.filter_queryset (self.get_queryset ())

Tipo de excepción: TypeError en / upload / Exception Valor: get_queryset () falta 1 argumento posicional requerido: ‘solicitud’

Se actualizó el archivo views.py como sigue

 from django.shortcuts import render from django.db.models import Q from django.http import HttpResponse from django.shortcuts import get_object_or_404 from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from rest_framework.parsers import MultiPartParser, FormParser from rest_framework import viewsets from rest_framework.status import HTTP_200_OK,HTTP_400_BAD_REQUEST from .models import employees from .serializers import ( employeesSerializer, FileUploaderSerializer, ) from django.contrib.auth import get_user_model from rest_framework.generics import ( CreateAPIView, DestroyAPIView, ListAPIView, RetrieveAPIView, RetrieveUpdateAPIView, ) from rest_framework.permissions import( AllowAny, IsAuthenticated, IsAdminUser, IsAuthenticatedOrReadOnly, ) class employeeList(APIView): def get(self,request): employees1=employees.objects.all() serializer=employeesSerializer(employees1,many=True) return Response(serializer.data) def post(self): pass User=get_user_model() from .serializers import( UserCreateSerializer, UserLoginSerializer, ) class UserCreateAPIView(CreateAPIView): serializer_class=UserCreateSerializer queryset=User.objects.all() class UserLoginAPIView(APIView): permission_classes=[AllowAny] serializer_class=UserLoginSerializer def post(self,request,*args,**kwargs): data=request.data serializer=UserLoginSerializer(data=data) if serializer.is_valid(raise_exception=True): new_data=serializer.data return Response(new_data,status=HTTP_200_OK) return Response(serializer.errors,status=HTTP_400_BAD_REQUEST) class FileUploaderViewSet(viewsets.ModelViewSet): serializer_class = FileUploaderSerializer parser_classes=(MultiPartParser,FormParser) # overriding default query set #queryset = LayerFile.objects.all() def get_queryset(self, *args, **kwargs): qs = super(FileUploaderViewSet, self).get_queryset(self, *args, **kwargs) qs = qs.filter(owner=self.request.user) return qs 

Rastrear:

Ambiente:

Método de solicitud: GET URL de solicitud: http://127.0.0.1:8000/upload/

Versión de Django: 1.11.7 Versión de Python: 3.6.3 Aplicaciones instaladas: [‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django .contrib.messages ‘,’ django.contrib.staticfiles ‘,’ rest_framework ‘,’ webapp ‘] Middleware instalado: [‘ django.middleware.security.SecurityMiddleware ‘,’ django.contrib.sessions.middleware.SessionMiddleware ‘,’ django .middleware.common.CommonMiddleware ‘,’ django.middleware.csrf.CsrfViewMiddleware ‘,’ django.contrib.auth.middleware.AuthenticationMiddleware ‘,’ ” ” ” ” ” ” ” ” ” ” ” ” ‘ ‘]

Rastrear:

El archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ exception.py” en el interior 41. response = get_response (solicitud)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ base.py” en _get_response 187. response = self.process_exception_by_middleware (e, solicitud)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ base.py” en _get_response 185. response = wrapped_callback (solicitud, * callback_args, ** callback_kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ views \ decorators \ csrf.py” enrapped_view 58. return view_func (* args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ viewsets.py” en la vista 90. return self.dispatch (solicitud, * args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en el envío 489. response = self.handle_exception (exc)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en handle_exception 449. self.raise_uncaught_exception (exc)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en el envío 486. response = handler (solicitud, * args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ mixins.py” en la lista 40. queryset = self.filter_queryset (self.get_queryset ())

Archivo “F: \ proj \ env \ myproject \ webapp \ views.py” en get_queryset 74. qs = super (FileUploaderViewSet, self) .get_queryset (self, * args, ** kwargs)

Tipo de excepción: TypeError en / upload / Exception Value: get_queryset () toma 1 argumento posicional pero se dieron 2


Nuevo Traceback después de cambiar el conjunto de consultas get

 class FileUploaderViewSet(viewsets.ModelViewSet): serializer_class = FileUploaderSerializer parser_classes=(MultiPartParser,FormParser) # overriding default query set def get_queryset(self): qs = super(FileUploaderViewSet, self).get_queryset() qs = qs.filter(owner=self.request.user) return qs 

Ambiente:

Método de solicitud: GET URL de solicitud: http://127.0.0.1:8000/upload/

Versión de Django: 1.11.7 Versión de Python: 3.6.3 Aplicaciones instaladas: [‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django .contrib.messages ‘,’ django.contrib.staticfiles ‘,’ rest_framework ‘,’ webapp ‘] Middleware instalado: [‘ django.middleware.security.SecurityMiddleware ‘,’ django.contrib.sessions.middleware.SessionMiddleware ‘,’ django .middleware.common.CommonMiddleware ‘,’ django.middleware.csrf.CsrfViewMiddleware ‘,’ django.contrib.auth.middleware.AuthenticationMiddleware ‘,’ ” ” ” ” ” ” ” ” ” ” ” ” ‘ ‘]

Rastrear:

El archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ exception.py” en el interior 41. response = get_response (solicitud)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ base.py” en _get_response 187. response = self.process_exception_by_middleware (e, solicitud)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ core \ handlers \ base.py” en _get_response 185. response = wrapped_callback (solicitud, * callback_args, ** callback_kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ django \ views \ decorators \ csrf.py” enrapped_view 58. return view_func (* args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ viewsets.py” en la vista 90. return self.dispatch (solicitud, * args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en el envío 489. response = self.handle_exception (exc)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en handle_exception 449. self.raise_uncaught_exception (exc)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ views.py” en el envío 486. response = handler (solicitud, * args, ** kwargs)

Archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ mixins.py” en la lista 40. queryset = self.filter_queryset (self.get_queryset ())

Archivo “F: \ proj \ env \ myproject \ webapp \ views.py” en get_queryset 74. qs = super (FileUploaderViewSet, self) .get_queryset ()

El archivo “F: \ proj \ env \ lib \ site-packages \ rest_framework \ generics.py” en get_queryset 68.% self. clase nombre

Tipo de excepción: AssertionError en / upload / Exception Value: ‘FileUploaderViewSet’ debe incluir un atributo queryset , o invalidar el método get_queryset() .

Como dijo Sayse, solo requiere self . pero no tienes que pasar self to get_queryset() . self es solo una instancia, el super sí mismo es la auto-instancia.

Así que solo cambia tu siguiente línea de

 super(FileUploaderViewSet, self).get_queryset(self, *args, **kwargs) 

a

 super(FileUploaderViewSet, self).get_queryset() 

mira el fragmento de código aquí

Actualizar:

¿Estás seguro de que tu get_queryset está en la misma clase?

¿Intentaste simplemente escribir queryset = Model.objects.all() ?

No veo model = ModelName en su vista.

view class debe tener los siguientes campos.

 def get_queryset(self): return queryset serializer_class = SerializerClass model = ModelName 

El get_queryset () no espera una ‘solicitud’. Tal vez elimine el argumento ‘solicitud’ de get_queryset (). Para referencia puedes consultar: get_queryset ()

Tal vez algo como esto:

 def get_queryset(self, *args, **kwargs): qs = your_model.objects.all() qs = qs.filter(owner=self.request.user) return qs 

get_queryset solo requiere self como parámetro.

Simplemente quite los otros argumentos.

get_queryset no espera el parámetro de solicitud y la clase base DRF no lo pasará. Sin embargo, está disponible como un atributo de instancia. Debe eliminarlo de la firma del método y de la súper llamada y acceder a él a través de self.request .

 def get_queryset(self, *args, **kwargs): qs = super(FileUploaderViewSet, self).get_queryset(*args, **kwargs) qs = qs.filter(owner=self.request.user) return qs