新功能: 1.加入软删除

pull/66/head
猿小天 2022-08-02 01:12:04 +08:00
parent b1f7b06092
commit f987744bc6
4 changed files with 38 additions and 10 deletions

View File

@ -13,7 +13,7 @@ STATUS_CHOICES = (
) )
class Users(AbstractUser, CoreModel): class Users(CoreModel,AbstractUser):
username = models.CharField(max_length=150, unique=True, db_index=True, verbose_name="用户账号", help_text="用户账号") username = models.CharField(max_length=150, unique=True, db_index=True, verbose_name="用户账号", help_text="用户账号")
email = models.EmailField(max_length=255, verbose_name="邮箱", null=True, blank=True, help_text="邮箱") email = models.EmailField(max_length=255, verbose_name="邮箱", null=True, blank=True, help_text="邮箱")
mobile = models.CharField(max_length=255, verbose_name="电话", null=True, blank=True, help_text="电话") mobile = models.CharField(max_length=255, verbose_name="电话", null=True, blank=True, help_text="电话")

View File

@ -19,10 +19,17 @@ class DeptSerializer(CustomModelSerializer):
""" """
parent_name = serializers.CharField(read_only=True, source='parent.name') parent_name = serializers.CharField(read_only=True, source='parent.name')
has_children = serializers.SerializerMethodField() has_children = serializers.SerializerMethodField()
status_label = serializers.SerializerMethodField()
def get_has_children(self, obj: Dept): def get_has_children(self, obj: Dept):
return Dept.objects.filter(parent_id=obj.id).count() return Dept.objects.filter(parent_id=obj.id).count()
def get_status_label(self, instance):
status = instance.status
if status:
return "启用"
return "禁用"
class Meta: class Meta:
model = Dept model = Dept
fields = '__all__' fields = '__all__'

View File

@ -10,12 +10,33 @@ import uuid
from django.apps import apps from django.apps import apps
from django.db import models from django.db import models
from django.db.models import QuerySet
from application import settings from application import settings
table_prefix = settings.TABLE_PREFIX # 数据库表名前缀 table_prefix = settings.TABLE_PREFIX # 数据库表名前缀
class SoftDeleteQuerySet(QuerySet):
def delete(self,soft_delete=True):
"""
重写删除方法
当soft_delete为True时表示软删除则修改删除时间为当前时间否则直接删除
:param soft: Boolean 是否软删除默认是
:return: Tuple eg.(3, {'lqModel.Test': 3})
"""
if soft_delete:
return self.update(is_deleted=True)
else:
return super(SoftDeleteQuerySet, self).delete()
class SoftDeleteManager(models.Manager):
"""支持软删除"""
def get_queryset(self):
return SoftDeleteQuerySet(self.model).filter(is_deleted=False)
class CoreModel(models.Model): class CoreModel(models.Model):
""" """
核心标准抽象模型模型,可直接继承使用 核心标准抽象模型模型,可直接继承使用
@ -31,6 +52,8 @@ class CoreModel(models.Model):
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) is_deleted = models.BooleanField(verbose_name="是否软删除",help_text='是否软删除', default=False, db_index=True)
objects = SoftDeleteManager()
class Meta: class Meta:
abstract = True abstract = True
@ -38,6 +61,8 @@ class CoreModel(models.Model):
verbose_name_plural = verbose_name verbose_name_plural = verbose_name
def get_all_models_objects(model_name=None): def get_all_models_objects(model_name=None):
""" """
获取所有 models 对象 获取所有 models 对象

View File

@ -43,11 +43,7 @@ class CustomModelViewSet(ModelViewSet,ImportSerializerMixin,ExportSerializerMixi
def filter_queryset(self, queryset): def filter_queryset(self, queryset):
for backend in set(set(self.filter_backends) | set(self.extra_filter_backends or [])): for backend in set(set(self.filter_backends) | set(self.extra_filter_backends or [])):
queryset = backend().filter_queryset(self.request, queryset, self) queryset = backend().filter_queryset(self.request, queryset, self)
request_query =self.request.query_params return queryset
is_deleted = request_query.get('is_deleted',None)
if is_deleted:
return queryset
return queryset.exclude(is_deleted=True)
def get_queryset(self): def get_queryset(self):
if getattr(self, 'values_queryset', None): if getattr(self, 'values_queryset', None):
@ -97,9 +93,9 @@ 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 request_data = request.data
soft_delete = request_data.get('softDelete',None) soft_delete = request_data.get('soft_delete',True)
if soft_delete: if soft_delete:
instance.is_deleted=True instance.is_deleted = True
instance.save() instance.save()
else: else:
self.perform_destroy(instance) self.perform_destroy(instance)