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