Merge remote-tracking branch 'origin/v2.x' into v2.x
commit
170ddfc3fc
|
@ -170,13 +170,19 @@ CORS_ALLOW_CREDENTIALS = True # 指明在跨域访问中,后端是否支持
|
||||||
# ================================================= #
|
# ================================================= #
|
||||||
ASGI_APPLICATION = 'application.routing.application'
|
ASGI_APPLICATION = 'application.routing.application'
|
||||||
CHANNEL_LAYERS = {
|
CHANNEL_LAYERS = {
|
||||||
'default': {
|
"default": {
|
||||||
'BACKEND': 'channels_redis.core.RedisChannelLayer',
|
"BACKEND": "channels.layers.InMemoryChannelLayer"
|
||||||
'CONFIG': {
|
|
||||||
"hosts": [('127.0.0.1', 6379)], #需修改
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
# CHANNEL_LAYERS = {
|
||||||
|
# 'default': {
|
||||||
|
# 'BACKEND': 'channels_redis.core.RedisChannelLayer',
|
||||||
|
# 'CONFIG': {
|
||||||
|
# "hosts": [('127.0.0.1', 6379)], #需修改
|
||||||
|
# },
|
||||||
|
# },
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
# ================================================= #
|
# ================================================= #
|
||||||
# ********************* 日志配置 ******************* #
|
# ********************* 日志配置 ******************* #
|
||||||
|
|
|
@ -44,6 +44,27 @@ class SoftDeleteManager(models.Manager):
|
||||||
return SoftDeleteQuerySet(self.model).get(username=name)
|
return SoftDeleteQuerySet(self.model).get(username=name)
|
||||||
|
|
||||||
|
|
||||||
|
class SoftDeleteModel(models.Model):
|
||||||
|
"""
|
||||||
|
软删除模型
|
||||||
|
一旦继承,就将开启软删除
|
||||||
|
"""
|
||||||
|
is_deleted = models.BooleanField(verbose_name="是否软删除", help_text='是否软删除', default=False, db_index=True)
|
||||||
|
objects = SoftDeleteManager()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
verbose_name = '软删除模型'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def delete(self, using=None, soft_delete=True, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
重写删除方法,直接开启软删除
|
||||||
|
"""
|
||||||
|
self.is_deleted = True
|
||||||
|
self.save(using=using)
|
||||||
|
|
||||||
|
|
||||||
class CoreModel(models.Model):
|
class CoreModel(models.Model):
|
||||||
"""
|
"""
|
||||||
核心标准抽象模型模型,可直接继承使用
|
核心标准抽象模型模型,可直接继承使用
|
||||||
|
@ -58,24 +79,12 @@ class CoreModel(models.Model):
|
||||||
update_datetime = models.DateTimeField(auto_now=True, null=True, blank=True, help_text="修改时间", verbose_name="修改时间")
|
update_datetime = models.DateTimeField(auto_now=True, null=True, blank=True, help_text="修改时间", verbose_name="修改时间")
|
||||||
create_datetime = models.DateTimeField(auto_now_add=True, null=True, blank=True, help_text="创建时间",
|
create_datetime = models.DateTimeField(auto_now_add=True, null=True, blank=True, help_text="创建时间",
|
||||||
verbose_name="创建时间")
|
verbose_name="创建时间")
|
||||||
is_deleted = models.BooleanField(verbose_name="是否软删除",help_text='是否软删除', default=False, db_index=True)
|
|
||||||
objects = SoftDeleteManager()
|
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
verbose_name = '核心模型'
|
verbose_name = '核心模型'
|
||||||
verbose_name_plural = verbose_name
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
def delete(self, using=None, soft_delete=True, *args, **kwargs):
|
|
||||||
"""
|
|
||||||
软删除,根据delete(soft_delete=T/F)来判断
|
|
||||||
"""
|
|
||||||
if soft_delete:
|
|
||||||
self.is_deleted = True
|
|
||||||
self.save(using=using)
|
|
||||||
else:
|
|
||||||
return super(CoreModel, self).delete(using=using, *args, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
"""
|
"""
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
from django.db import transaction
|
||||||
from drf_yasg import openapi
|
from drf_yasg import openapi
|
||||||
from drf_yasg.utils import swagger_auto_schema
|
from drf_yasg.utils import swagger_auto_schema
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
@ -50,6 +51,7 @@ class CustomModelViewSet(ModelViewSet,ImportSerializerMixin,ExportSerializerMixi
|
||||||
return self.values_queryset
|
return self.values_queryset
|
||||||
return super().get_queryset()
|
return super().get_queryset()
|
||||||
|
|
||||||
|
|
||||||
def get_serializer_class(self):
|
def get_serializer_class(self):
|
||||||
action_serializer_name = f"{self.action}_serializer_class"
|
action_serializer_name = f"{self.action}_serializer_class"
|
||||||
action_serializer_class = getattr(self, action_serializer_name, None)
|
action_serializer_class = getattr(self, action_serializer_name, None)
|
||||||
|
@ -57,6 +59,16 @@ class CustomModelViewSet(ModelViewSet,ImportSerializerMixin,ExportSerializerMixi
|
||||||
return action_serializer_class
|
return action_serializer_class
|
||||||
return super().get_serializer_class()
|
return super().get_serializer_class()
|
||||||
|
|
||||||
|
# 通过many=True直接改造原有的API,使其可以批量创建
|
||||||
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
serializer_class = self.get_serializer_class()
|
||||||
|
kwargs.setdefault('context', self.get_serializer_context())
|
||||||
|
if isinstance(self.request.data, list):
|
||||||
|
with transaction.atomic():
|
||||||
|
return serializer_class(many=True, *args, **kwargs)
|
||||||
|
else:
|
||||||
|
return serializer_class(*args, **kwargs)
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
serializer = self.get_serializer(data=request.data, request=request)
|
serializer = self.get_serializer(data=request.data, request=request)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
|
@ -92,9 +104,7 @@ class CustomModelViewSet(ModelViewSet,ImportSerializerMixin,ExportSerializerMixi
|
||||||
|
|
||||||
def destroy(self, request, *args, **kwargs):
|
def destroy(self, request, *args, **kwargs):
|
||||||
instance = self.get_object()
|
instance = self.get_object()
|
||||||
request_data = request.data
|
instance.delete()
|
||||||
soft_delete = request_data.get('soft_delete',True)
|
|
||||||
instance.delete(soft_delete=soft_delete)
|
|
||||||
return DetailResponse(data=[], msg="删除成功")
|
return DetailResponse(data=[], msg="删除成功")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue