2016-04-16 7 views
0

Ich habe eine einfache CBV für alle CRUD-Operationen auf meinem Modell (sagen wir Buch). Wie soll ich ein Objekt nach ID bekommen und eine Liste aller Objekte bekommen? Scheint, es gibt viele Optionen wie:Django CBV bekommen Liste, erhalten Objekt

  1. Erstellen Sie einfach zwei separate Klassen Book und BookList.

  2. Schreiben Sie eine Art Dispatcher in get Methode.

    class BookView(View): 
        def get(self, request, *args, **kwargs): 
         if 'id' in self.kwargs: 
          self.get_object(request, *args, **kwargs) 
         else: 
          self.get_list(request, *args, **kwargs) 
    
  3. Aufschalten View.dispatch Methode, so dass es nennen get_list() Methode, wenn keine ID bereitgestellt.

etc ...

Also, was besten Weg ist?

Antwort

0

Der beste Weg für Crud-APIs ist DRF und Unterklasse generics.ListCreateAPIView zu verwenden, um eine Liste aller Objekte zu erhalten oder ein neues Objekt zu erstellen.

generics.RetrieveUpdateDestroyAPIView um ein Objekt per ID zu erhalten oder das Objekt durch ID zu zerstören und zu aktualisieren. Wie folgt:

class BookDetail(generics.RetrieveUpdateDestroyAPIView): 
    """ 
    Retrieve, update or delete a book instance. 
    """ 

    queryset = Book.objects.all() 
    serializer_class = BookSerializer 

Sie müssen wahrscheinlich Ihre Serializer entsprechend erstellen.

+0

Ist es nicht ein Overkill, das Framework dafür zu verwenden? Ich habe jetzt einen ziemlich einfachen Code. Wie auch immer, ich endete mit einer neuen Klasse mit überschriebenen View.dispatch und vererbte meine Ansichten daraus. –