新功能: 1.加入软删除
parent
b1f7b06092
commit
f987744bc6
|
@ -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="电话")
|
||||||
|
|
|
@ -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__'
|
||||||
|
|
|
@ -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 对象
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue