109 lines
5.0 KiB
Python
109 lines
5.0 KiB
Python
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
@Remark: 公共基础model类
|
||
"""
|
||
import uuid
|
||
|
||
from django.apps import apps
|
||
|
||
from django.db import models
|
||
|
||
from application import settings
|
||
|
||
table_prefix = "lyadmin_" # 数据库表名前缀
|
||
|
||
|
||
def make_uuid():
|
||
# .hex 将生成的uuid字符串中的 - 删除,带-是36位字符,不带-是32位随机字符串
|
||
return str(uuid.uuid4().hex)
|
||
|
||
class CoreModel(models.Model):
|
||
"""
|
||
核心标准抽象模型模型,可直接继承使用
|
||
增加审计字段, 覆盖字段时, 字段名称请勿修改, 必须统一审计字段名称
|
||
"""
|
||
id = models.BigAutoField(primary_key=True, help_text="Id", verbose_name="Id")
|
||
# id = models.CharField(max_length=100, primary_key=True, default=make_uuid, help_text="Id", verbose_name="Id")
|
||
#description = models.CharField(max_length=100, verbose_name="描述", null=True, blank=True, help_text="描述")
|
||
creator = models.ForeignKey(to=settings.AUTH_USER_MODEL, related_query_name='creator_query', null=True,verbose_name='创建人', help_text="创建人", on_delete=models.SET_NULL, db_constraint=False)
|
||
modifier = models.CharField(max_length=100, null=True, blank=True, help_text="修改人", verbose_name="修改人")
|
||
dept_belong_id = models.CharField(max_length=100, help_text="数据归属部门", null=True, blank=True, 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="创建时间",
|
||
verbose_name="创建时间")
|
||
|
||
class Meta:
|
||
abstract = True
|
||
verbose_name = '核心模型'
|
||
verbose_name_plural = verbose_name
|
||
|
||
class SimpleCoreModel(models.Model):
|
||
"""
|
||
核心简化模型,可直接继承使用
|
||
无数据归属字段,可选择性使用
|
||
"""
|
||
creator = models.ForeignKey(to=settings.AUTH_USER_MODEL,related_query_name='creator_query', null=True,verbose_name='创建人', help_text="创建人", on_delete=models.SET_NULL, db_constraint=False)
|
||
modifier = models.CharField(max_length=100, 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="创建时间",verbose_name="创建时间")
|
||
is_delete = models.BooleanField(default=False, verbose_name="是否逻辑删除", help_text="是否逻辑删除")
|
||
|
||
class Meta:
|
||
abstract = True
|
||
verbose_name = '核心简化模型'
|
||
verbose_name_plural = verbose_name
|
||
|
||
class BaseModel(models.Model):
|
||
"""
|
||
基本模型,可直接继承使用,一般不需要使用审计字段的模型可以使用
|
||
覆盖字段时, 字段名称请勿修改
|
||
"""
|
||
update_datetime = models.DateTimeField(auto_now=True, null=True, blank=True, verbose_name='更新时间')
|
||
create_datetime = models.DateTimeField(auto_now_add=True, null=True, blank=True, verbose_name='创建时间')
|
||
|
||
class Meta:
|
||
abstract = True # 表示该类是一个抽象类,只用来继承,不参与迁移操作
|
||
verbose_name = '基本模型'
|
||
verbose_name_plural = verbose_name
|
||
|
||
|
||
def get_all_models_objects(model_name=None):
|
||
"""
|
||
获取所有 models 对象
|
||
:return: {}
|
||
"""
|
||
#排除不需要的django内置models
|
||
exclude_list = ['django.contrib.admin.models','django.contrib.sessions.models','django.contrib.auth.models','django.contrib.contenttypes.models','captcha.models','django_celery_results.models','django_celery_beat.models']
|
||
settings.ALL_MODELS_OBJECTS = {}
|
||
if not settings.ALL_MODELS_OBJECTS:
|
||
all_models = apps.get_models()
|
||
for item in list(all_models):
|
||
if not item.__module__ in exclude_list:
|
||
table = {
|
||
"table_name": item._meta.verbose_name,
|
||
"db_table": item._meta.db_table,
|
||
"class_name": item.__name__,
|
||
"tableFields": [],
|
||
"import_path":"from %s import %s"%(item.__module__,item.__name__)
|
||
}
|
||
# for field in item._meta.fields:
|
||
# fields = {
|
||
# "title": field.verbose_name,
|
||
# "field": field.name
|
||
# }
|
||
# table['tableFields'].append(fields)
|
||
settings.ALL_MODELS_OBJECTS.setdefault(item.__name__, {"table": table, "object": item})
|
||
if model_name:
|
||
try:
|
||
return settings.ALL_MODELS_OBJECTS[model_name] or {}
|
||
except:
|
||
return {}
|
||
return settings.ALL_MODELS_OBJECTS or {}
|
||
|
||
def is_table_exists(table_name):
|
||
"""
|
||
检查表名是否存在
|
||
"""
|
||
from django.db import connection
|
||
return table_name in connection.introspection.table_names() |