当前位置: 首页> 汽车> 维修 > 企业管理软件销售_广西网站建设公司_seo教程搜索引擎优化入门与进阶_南宁网站seo外包

企业管理软件销售_广西网站建设公司_seo教程搜索引擎优化入门与进阶_南宁网站seo外包

时间:2025/7/11 17:30:44来源:https://blog.csdn.net/qq_29518275/article/details/142551702 浏览次数: 0次
企业管理软件销售_广西网站建设公司_seo教程搜索引擎优化入门与进阶_南宁网站seo外包

场景

如果你的表结构有这些字段:创建人/创建时间/更新人/更新时间/删除人/删除时间,我们可以统一处理这些字段的更新和插入,而不需要额外显示操作。

代码

1.ActionViewSetMixin:

import datetime
from rest_framework import status
from rest_framework.response import Responseclass ActionViewSetMixin:def destroy_mixin(self, request):instance = self.get_object()data = {"deleted_by": request.user.username,"deleted_at": datetime.datetime.now(),"is_deleted": True,}serializer = self.get_serializer(instance, data=data, partial=True)serializer.is_valid(raise_exception=True)self.perform_update(serializer)if getattr(instance, "_prefetched_objects_cache", None):# If 'prefetch_related' has been applied to a queryset, we need to# forcibly invalidate the prefetch cache on the instance.instance._prefetched_objects_cache = {}return Response(serializer.data)def destroy(self, request, *args, **kwargs):return self.destroy_mixin(request)def update_mixin(self, request, serializer):serializer.is_valid(raise_exception=True)data = serializer.validated_datadata["updated_by"] = request.user.usernamedata["updated_at"] = datetime.datetime.now()partial = Trueinstance = self.get_object()serializer = self.get_serializer(instance, data=data, partial=partial)serializer.is_valid(raise_exception=True)self.perform_update(serializer)if getattr(instance, "_prefetched_objects_cache", None):# If 'prefetch_related' has been applied to a queryset, we need to# forcibly invalidate the prefetch cache on the instance.instance._prefetched_objects_cache = {}return Response(serializer.data)def update(self, request, *args, **kwargs):serializer_class = kwargs.pop("serializer", self.get_serializer)return self.update_mixin(request, serializer_class(data=request.data))def create_mixin(self, request, *args, **kwargs):data = request.data.copy()data["created_by"] = request.user.usernamedata["created_at"] = datetime.datetime.now()serializer_class = kwargs.pop("serializer", self.get_serializer)serializer = serializer_class(data=data)serializer.is_valid(raise_exception=True)self.perform_create(serializer)headers = self.get_success_headers(serializer.data)return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)def create(self, request, *args, **kwargs):return self.create_mixin(request, *args, **kwargs)

2.APIModelViewSet继承ModelViewSet和ActionViewSetMixin:

from rest_framework.viewsets import ModelViewSetfrom common.drf.mixins import ActionViewSetMixin, ResponseMixinclass APIModelViewSet(ActionViewSetMixin, ResponseMixin, ModelViewSet):extra_permissions = []  # 不覆盖默认的权限action_extra_permission_mapping = {}def parse_page_params(self):if self.request.method == "GET":page = self.request.query_params.get("page", 1)page_size = self.request.query_params.get("page_size", 10)else:page = self.request.data.get("page", 1)page_size = self.request.data.get("page_size", 10)try:return int(page), int(page_size)except Exception as e:return 1, 10def get_permissions(self):permissions = super(APIModelViewSet, self).get_permissions()extra = [x() for x in self.extra_permissions]action = self.action_extra_permission_mapping.get(self.action, [])return permissions + extra + [p() for p in action]@classmethoddef get_validated_params(cls, serializer, params):s = serializer(data=params)s.is_valid(raise_exception=True)return s.validated_data

3.视图类继承APIModelViewSet:

class ScanRecordViewSet(APIModelViewSet):queryset = models.ScanRecord.exclude_deleted_objects.all()serializer_class = serializers.ScanRecordSerializerpagination_class = DataPageNumberPaginationfilter_backends = [CustomFilterBackend, SearchFilter]search_fields = ["status", "mode", 'risk']custom_query_fields = ["status", "mode", "risk"]

关键字:企业管理软件销售_广西网站建设公司_seo教程搜索引擎优化入门与进阶_南宁网站seo外包

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: