如何重写.create一个通用视图内()方法:在Django静止框架(例如ListCreateAPIView)?

问题描述 投票:0回答:2

我想重写基于类的视图的创建方法,实现了ListCreateAPIView,一般不会同时覆盖像get_queryset(self)方法方法的要求,该URL **kwargsself访问,但我想重写.create()CreateModelMixin方法,所以我看了看代码,找到签名create(self, request, *args, **kwargs)什么Django的传递这个函数的**kwargs, *args?是万一这些网址**kwargs?我怎么去覆盖在asthe request通用视图的创建方法在通用视图的任何功能从self访问,但在创建函数的签名明确要求的请求参数。

python django django-rest-framework django-views
2个回答
2
投票

以下是DRF ListCreateAPIView,你可以看到*args, **kwargs直接从标准post方法传承:

class ListCreateAPIView(mixins.ListModelMixin,
                    mixins.CreateModelMixin,
                    GenericAPIView):
    """
    Concrete view for listing a queryset or creating a model instance.
    """
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

现在,说起从create覆盖CreateModelMixin,你可以简单地忽略它:

from rest_framework import generics

class YourWonderfulView(generics.ListCreateAPIView):

    queryset = YourModelClass.objects.all()
    serializer_class = YourSerializer

    def create(self, request, *args, **kwargs): # don't need to `self.request` since `request` is available as a parameter.

        # your custom implementation goes here

        return Response(response) # `response` is your custom response – e.g. dict, list, list of dicts etc

希望能帮助到你 :)


1
投票
from rest_framework import generics

from tasks.models import Task
from tasks.serializers import TaskSerializer


class TaskList(generics.ListCreateAPIView):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer

    def create(self, request, *args,**kwargs):
        # your implementation
        return Response(response)
© www.soinside.com 2019 - 2024. All rights reserved.