Python 如何在django中从预写视图中删除put

Python 如何在django中从预写视图中删除put,python,django,Python,Django,我有以下看法: class ReadClass(generics.RetrieveUpdateDestroyAPIView): queryset = MyCModel.objects.all() serializer_class = MySerializer def post(self, request, *args, **kwargs): ''' defined my post here''' 我知道retrieveupdatedestroyapi视

我有以下看法:

class ReadClass(generics.RetrieveUpdateDestroyAPIView):
    queryset = MyCModel.objects.all()
    serializer_class = MySerializer
    def post(self, request, *args, **kwargs):
         ''' defined my post here'''
我知道
retrieveupdatedestroyapi
视图中没有post。我在这里和前端的视图中创建了我自己的帖子,我看到了post和put!有没有什么办法可以去掉这个推杆

或者有没有其他更好的方法,我尝试使用
ListCreateApi视图
。问题是,虽然它给了我post功能,但它列出了所有的值,而我正在寻找一个特定的
pk
。我看不到任何其他提供
get
post
功能的通用视图

编辑

我已经按要求添加了编辑,现在这里可能没有必要尝试,但稍后我会添加更多功能

class ReadClass(generics.GenericAPIView, mixins.CreateModelMixin, mixins.RetrieveModelMixin):
    queryset = MyCModel.objects.all()
    serializer_class = MySerializer
    def post(self, request, *args, **kwargs):
        try:
            s1 = MySerializer.objects.get(mRID=kwargs["pk"])
            serializer = MySerializer(s1, data=request.data)
        except MySerializer.DoesNotExist:
            pass
        if serializer.is_valid():
            if flag == 0:
                pass
            else:
               serializer.update(s1,validated_data=request.data)
        else:
            return Response(serializer.errors)

urlpatterns = [path('temp/<int:pk>', ReadClass.as_view(), name = " reading"),]
class ReadClass(generics.GenericAPIView、mixins.CreateModelMixin、mixins.RetrieveModelMixin):
queryset=MyCModel.objects.all()
序列化程序\u class=MySerializer
def post(自我、请求、*args、**kwargs):
尝试:
s1=MySerializer.objects.get(mRID=kwargs[“pk”])
serializer=MySerializer(s1,data=request.data)
除MySerializer.DoesNotExist外:
通过
如果序列化程序.u有效():
如果标志==0:
通过
其他:
serializer.update(s1,validated_data=request.data)
其他:
返回响应(序列化程序错误)
urlpatterns=[path('temp/',ReadClass.as_view(),name=“reading”),]

DRF具有列表、创建、检索、更新和删除功能的混合功能。通用视图只是将这些混合体组合起来。您可以根据自己的具体需要选择这些混音器的任何子集。在您的情况下,如果您只想创建和检索功能,可以这样编写视图:

class ReadClass(GenericAPIView, CreateModelMixin, RetrieveModelMixin):
    queryset = MyCModel.objects.all()
    serializer_class = MySerializer

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)
这将为post和get请求提供默认功能。如果愿意,可以像在示例中一样重写post方法,以自定义post REQUEST行为


你可以阅读更多关于mixin和泛型视图的内容

我理解你的意思,即使在实现了它之后,我也只能发表文章,上面写着
“detail”:“Method\”GET\“not allowed”。
。此外,它还显示
Allow:POST,OPTIONS
。否
GET
Retrieve方法用于检索单个项目,而不是列表。因此,要检索,您需要向/view\u path/id发送请求,这正是我正在做的。我可以看到检索在
retrieveupdatedestroy
中工作,url类型为
view\u path/id
,但不在模型mixin中。您可以发布url.py和更新的视图定义吗?mixin提供诸如检索/列表/创建/更新/销毁等方法,当子类化GenericAPIView时,需要将请求方法链接到这些方法。但是,如果将ViewSet和子类GenericViewSet与mixin一起使用,则不需要编写get/post等方法,但在这种情况下,需要使用路由器以不同的方式进行url绑定