2016-10-29 4 views
0

Ich verwende Django Rest Framework und Python-Anfragen und übergebe mehrere Variablen über die URL wie unten gezeigt.Wo kann ich auf Anfrageparameter im Django Rest Framework zugreifen?

"GET/api/boxobjects /? Format = json & make = Prusa & Modell = i3 & Kunststoff = PLA HTTP/1.1"

So bin ich vorbei die Variablen Marke, Modell und Kunststoff. Die empfohlene Methode zum Zugriff auf diese Parameter ist unten gezeigt.

makedata = request.GET.get('make', '') 

Allerdings habe ich keine Ahnung, wo diese Codezeile platziert werden soll. Ich habe das Lernprogramm für Django Rest Framework abgeschlossen und meine Ansichten so eingerichtet, dass sie dem Lernprogramm entsprechen.

views.py

@api_view(['GET']) 
@login_required 
def api_root(request, format=None): 
    return Response({ 
     'Users': reverse('api:user-list', request=request, format=format), 
     'Objects': reverse('api:object-list', request=request, format=format), 
     'Files': reverse('api:file-list', request=request, format=format), 
     'Config Files': reverse('api:config-list', request=request, format=format), 
     'Box-objects': reverse('api:box-object-list', request=request, format=format), 

    }) 

class BoxViewSet(viewsets.ModelViewSet): 

    queryset = Uploadobject.objects.all().exclude(verified=False) 
    serializer_class = BoxSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, 
          IsBox) 

    def perform_create(self, serializer): 
     serializer.save(owner=self.request.user) 

    #Maybe get function here? Not displaying 
    ''' 
    def get(self, request): 
     print ("request set here?") 
    ''' 

Wo würde ich die eine Zeile Code platzieren diese Anforderungsparameter zugreifen?

Antwort

3
class BoxViewSet(viewsets.ModelViewSet): 
    queryset = Uploadobject.objects.all().exclude(verified=False) 
    serializer_class = BoxSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, 
          IsBox) 

    def perform_create(self, serializer): 
     serializer.save(owner=self.request.user) 


    def get_queryset(self): 
     req = self.request 
     print(req) 
     make = req.query_params.get('make') 
     if make: 
      self.queryset = uploadobject.objects.filter(make=make) 
      return self.queryset 
     else: 
      return self.queryset 

Was macht die Aussage?

Wenn 'make' in der Abfrage params des Antrags ist dann überschreiben die BoxViewSet queryset Eigenschaft mit einem neuen queryset basierend auf 'make' und es zurück. Andernfalls geben Sie das Standard-Abfrage-Set zurück, das alle Objekte ausschließt, die nicht überprüft wurden.

+0

Das funktioniert perfekt! So gut, tatsächlich funktioniert es ohne die if/else-Anweisung. Was macht diese Aussage für Bonuspunkte? – RknRobin

Verwandte Themen