Django CBV获取列表,获取对象

时间:2016-04-16 18:05:02

标签: python django python-3.x django-class-based-views

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

  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方法,以便在没有提供id的情况下调用get_list()方法。

  4. 等...

    那么最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

crud API的最佳方法是使用DRF并将generics.ListCreateAPIView子类化以获取所有对象的列表或创建新对象。

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

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

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

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