Django rest vi中的部分更新

2024-04-19 21:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有使用用户配置文件的视图。实现了put和delete方法。如何添加修补程序方法或使用仅更新一个字段(创建/更新化身字段)的方法?在

在视图.py公司名称:

from rest_framework import permissions
from rest_framework.generics import RetrieveAPIView
from rest_framework.mixins import UpdateModelMixin, DestroyModelMixin
from rest_framework.parsers import MultiPartParser, FormParser
from rest_framework.serializers import ValidationError

from djangorestframework_camel_case.parser import CamelCaseJSONParser

from api.models import User
from api.permissions import IsOwnerOrReadOnly
from api.auth.serializers import username_validation
from .serializers import AccountSerializer


class AccountAPIView(RetrieveAPIView, UpdateModelMixin, DestroyModelMixin):
    queryset = User.objects.all()
    permission_classes = (IsOwnerOrReadOnly, permissions.IsAuthenticated)
    serializer_class = AccountSerializer
    parser_classes = (MultiPartParser, FormParser, CamelCaseJSONParser)


    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        user = self.request.user
        new_username = self.request.data.get('username', None)
        if new_username and user.username != new_username:
            try:
                username_validation(new_username)
            except ValidationError as error:
                Response(str(error), status=status.HTTP_400_BAD_REQUEST)

        return self.update(request, *args, **kwargs)

在序列化程序.py公司名称:

^{pr2}$

Tags: 方法fromimportselfrestapipermissionsnew
2条回答

添加

partial=True

在序列化程序中启用部分编辑

最简单的解决方案就是使用与put和delete方法相同的主体:

def patch(self, request, *args, **kwargs):
        self.usernameCheck()
        return self.partial_update(request, *args, **kwargs)

相关问题 更多 >