2016-04-16 109 views
0

我对我的模型(比如说Book)上的所有CRUD操作都有一个简单的CBV。我应该如何实现通过id获取对象并获取所有对象的列表?似乎有很多选项,如:Django CBV获取列表,获取对象

  1. 只需创建两个单独的类Book和BookList。

  2. 在get方法里写一些调度器。

    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. 覆盖View.dispatch方法,这样它会调用get_list()方法,如果没有ID提供。

等等

那么,什么是最好的办法吗?

回答

0

crud API的最佳方法是使用DRFgenerics.ListCreateAPIView的子类获取所有对象的列表或创建新对象。

generics.RetrieveUpdateDestroyAPIView通过id获取对象或通过id销毁和更新对象。像这样:

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

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

您可能需要相应地创建序列化程序。

+0

这不是一个矫枉过正的使用框架吗?我现在有一个非常简单的代码。无论如何,我结束了与覆盖View.dispatch新的类,并从它继承我的看法。 –