parent
d3709fe4b5
commit
fe8fd533c2
|
@ -45,7 +45,7 @@ INSTALLED_APPS = [
|
||||||
'corsheaders',
|
'corsheaders',
|
||||||
'captcha',
|
'captcha',
|
||||||
# 自定义app
|
# 自定义app
|
||||||
'apps.system',
|
'apps.permission',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
@ -275,7 +275,7 @@ AUTHENTICATION_BACKENDS = (
|
||||||
'utils.backends.CustomBackend',
|
'utils.backends.CustomBackend',
|
||||||
'utils.backends.SessionAuthentication',
|
'utils.backends.SessionAuthentication',
|
||||||
)
|
)
|
||||||
AUTH_USER_MODEL = 'system.UserProfile'
|
AUTH_USER_MODEL = 'permission.UserProfile'
|
||||||
|
|
||||||
# ================================================= #
|
# ================================================= #
|
||||||
# ************** 登录验证码配置 ************** #
|
# ************** 登录验证码配置 ************** #
|
||||||
|
|
|
@ -25,7 +25,7 @@ from django.urls import re_path, include
|
||||||
from django.views.static import serve
|
from django.views.static import serve
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
from apps.system.views import GetUserView, GetRouters
|
from apps.permission.views import GetUserView, GetRouters
|
||||||
from utils.login import LoginView, LogoutView
|
from utils.login import LoginView, LogoutView
|
||||||
from utils.response import SuccessResponse
|
from utils.response import SuccessResponse
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class PermissionConfig(AppConfig):
|
||||||
|
name = 'permission'
|
||||||
|
verbose_name = "权限管理"
|
|
@ -0,0 +1,5 @@
|
||||||
|
from ..models.dept import Dept
|
||||||
|
from ..models.menu import Menu
|
||||||
|
from ..models.post import Post
|
||||||
|
from ..models.role import Role
|
||||||
|
from ..models.users import UserProfile
|
|
@ -0,0 +1,21 @@
|
||||||
|
from django.db.models import SET_DEFAULT
|
||||||
|
|
||||||
|
from utils import fields
|
||||||
|
from utils.BaseModels import CoreModel
|
||||||
|
|
||||||
|
|
||||||
|
class Dept(CoreModel):
|
||||||
|
name = fields.CharField(null=False, max_length=64, verbose_name="部门名称")
|
||||||
|
orderNum = fields.IntegerField(verbose_name="显示排序")
|
||||||
|
owner = fields.CharField(max_length=32, verbose_name="负责人")
|
||||||
|
phone = fields.CharField(max_length=32, verbose_name="联系电话")
|
||||||
|
email = fields.CharField(max_length=32, verbose_name="邮箱")
|
||||||
|
status = fields.BooleanField(default=False, verbose_name="部门状态")
|
||||||
|
parentId = fields.ForeignKey(to='Dept', on_delete=SET_DEFAULT, default=False, verbose_name="上级部门")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '部门管理'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.name}"
|
|
@ -0,0 +1,42 @@
|
||||||
|
from django.db.models import SET_DEFAULT
|
||||||
|
|
||||||
|
from utils import fields
|
||||||
|
from utils.BaseModels import CoreModel
|
||||||
|
|
||||||
|
|
||||||
|
class Menu(CoreModel):
|
||||||
|
MENU_TYPE_CHOICES = (
|
||||||
|
(0, "目录"),
|
||||||
|
(1, "菜单"),
|
||||||
|
(2, "按钮"),
|
||||||
|
)
|
||||||
|
METHOD_CHOICE = (
|
||||||
|
('GET', 'GET'),
|
||||||
|
('POST', 'POST'),
|
||||||
|
('PUT', 'PUT'),
|
||||||
|
('PATCH', 'PATCH'),
|
||||||
|
('DELETE', 'DELETE'),
|
||||||
|
('HEAD', 'HEAD'),
|
||||||
|
('OPTIONS', 'OPTIONS'),
|
||||||
|
('TRACE', 'TRACE'),
|
||||||
|
)
|
||||||
|
name = fields.CharField(null=False, max_length=64, verbose_name="菜单名称")
|
||||||
|
icon = fields.CharField(max_length=64, verbose_name="菜单图标")
|
||||||
|
orderNum = fields.IntegerField(verbose_name="显示排序")
|
||||||
|
menuType = fields.IntegerField(choices=MENU_TYPE_CHOICES, verbose_name="菜单类型")
|
||||||
|
status = fields.BooleanField(default=False, verbose_name="菜单状态")
|
||||||
|
visible = fields.BooleanField(default=False, verbose_name="显示状态")
|
||||||
|
isFrame = fields.BooleanField(default=False, verbose_name="是否外链")
|
||||||
|
web_path = fields.CharField(max_length=128, verbose_name="前端路由地址")
|
||||||
|
component_path = fields.CharField(max_length=128, verbose_name="组件路径")
|
||||||
|
interface_path = fields.CharField(max_length=256, verbose_name="接口路径")
|
||||||
|
interface_method = fields.CharField(choices=METHOD_CHOICE, max_length=16, verbose_name="接口请求方式")
|
||||||
|
isCache = fields.BooleanField(default=False, verbose_name="是否外链")
|
||||||
|
parentId = fields.ForeignKey(to='Menu', on_delete=SET_DEFAULT, default=False, verbose_name="上级菜单")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '菜单管理'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.name}"
|
|
@ -0,0 +1,17 @@
|
||||||
|
from utils import fields
|
||||||
|
from utils.BaseModels import CoreModel
|
||||||
|
|
||||||
|
|
||||||
|
class Post(CoreModel):
|
||||||
|
name = fields.CharField(null=False, max_length=64, verbose_name="岗位名称")
|
||||||
|
web_path = fields.CharField(max_length=32, verbose_name="岗位编码")
|
||||||
|
orderNum = fields.IntegerField(verbose_name="岗位顺序")
|
||||||
|
status = fields.BooleanField(default=False, verbose_name="岗位状态")
|
||||||
|
remark = fields.TextField(verbose_name="备注", help_text="备注")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '岗位管理'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.name}"
|
|
@ -0,0 +1,26 @@
|
||||||
|
from utils import fields
|
||||||
|
from utils.BaseModels import CoreModel
|
||||||
|
|
||||||
|
|
||||||
|
class Role(CoreModel):
|
||||||
|
PURVIEW_CHOICES = (
|
||||||
|
(0, "全部数据权限"),
|
||||||
|
(1, "自定数据权限"),
|
||||||
|
(2, "本部门数据权限"),
|
||||||
|
(3, "本部门及以下数据权限"),
|
||||||
|
(4, "仅本人数据权限"),
|
||||||
|
)
|
||||||
|
name = fields.CharField(null=False, max_length=64, verbose_name="角色名称")
|
||||||
|
orderNum = fields.IntegerField(verbose_name="角色顺序")
|
||||||
|
status = fields.BooleanField(default=False, verbose_name="角色状态")
|
||||||
|
purview = fields.IntegerField(default=0, choices=PURVIEW_CHOICES, verbose_name="权限范围")
|
||||||
|
remark = fields.TextField(verbose_name="备注", help_text="备注")
|
||||||
|
dept = fields.ManyToManyField(to='Dept', verbose_name='数据权限-关联部门')
|
||||||
|
menu = fields.ManyToManyField(to='Menu', verbose_name='关联菜单权限')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '角色管理'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.name}"
|
|
@ -0,0 +1,41 @@
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
|
from django.contrib.auth.models import UserManager, AbstractUser
|
||||||
|
|
||||||
|
from utils import fields
|
||||||
|
|
||||||
|
|
||||||
|
class UserProfile(AbstractUser):
|
||||||
|
GENDER_CHOICES = (
|
||||||
|
(0, "女"),
|
||||||
|
(1, "男"),
|
||||||
|
(2, "未知"),
|
||||||
|
)
|
||||||
|
USER_TYPE_CHOICES = (
|
||||||
|
(0, "后台用户"),
|
||||||
|
(1, "前台用户"),
|
||||||
|
)
|
||||||
|
objects = UserManager()
|
||||||
|
username = fields.CharField(max_length=150, unique=True, db_index=True, verbose_name='用户账号')
|
||||||
|
secret = fields.CharField(max_length=255, default=uuid4, verbose_name='加密秘钥')
|
||||||
|
email = fields.CharField(max_length=255, verbose_name="邮箱")
|
||||||
|
mobile = fields.CharField(max_length=255, verbose_name="电话")
|
||||||
|
avatar = fields.TextField(verbose_name="头像")
|
||||||
|
name = fields.CharField(max_length=40, verbose_name="姓名")
|
||||||
|
gender = fields.IntegerField(default=2, choices=GENDER_CHOICES, verbose_name="性别")
|
||||||
|
remark = fields.TextField(verbose_name="备注")
|
||||||
|
user_type = fields.IntegerField(default=2, choices=GENDER_CHOICES, verbose_name="用户类型")
|
||||||
|
post = fields.ForeignKey(to='Post', verbose_name='关联岗位')
|
||||||
|
role = fields.ForeignKey(to='Role', verbose_name='关联角色')
|
||||||
|
dept = fields.ForeignKey(to='Dept', verbose_name='归属部门')
|
||||||
|
create_datetime = fields.CreateDateTimeField()
|
||||||
|
update_datetime = fields.UpdateDateTimeField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '用户管理'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self.name:
|
||||||
|
return f"{self.username}({self.name})"
|
||||||
|
return f"{self.username}"
|
|
@ -1,6 +1,6 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from apps.system.models import UserProfile
|
from apps.permission.models import UserProfile
|
||||||
|
|
||||||
|
|
||||||
class GetUserInfoSerializer(serializers.ModelSerializer):
|
class GetUserInfoSerializer(serializers.ModelSerializer):
|
|
@ -3,9 +3,6 @@ import json
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
from system.serializers import GetUserInfoSerializer
|
|
||||||
from utils.response import SuccessResponse
|
|
||||||
|
|
||||||
|
|
||||||
class GetUserView(APIView):
|
class GetUserView(APIView):
|
||||||
"""
|
"""
|
||||||
|
@ -18,6 +15,7 @@ class GetUserView(APIView):
|
||||||
data = json.loads(data)
|
data = json.loads(data)
|
||||||
return Response(data)
|
return Response(data)
|
||||||
|
|
||||||
|
|
||||||
class GetRouters(APIView):
|
class GetRouters(APIView):
|
||||||
"""
|
"""
|
||||||
获取用户详细信息
|
获取用户详细信息
|
|
@ -1,5 +0,0 @@
|
||||||
from django.apps import AppConfig
|
|
||||||
|
|
||||||
|
|
||||||
class SystemConfig(AppConfig):
|
|
||||||
name = 'system'
|
|
|
@ -1 +0,0 @@
|
||||||
from ..models.users import UserProfile
|
|
|
@ -1,38 +0,0 @@
|
||||||
from uuid import uuid4
|
|
||||||
|
|
||||||
from django.contrib.auth.models import UserManager, AbstractUser
|
|
||||||
from django.db import models
|
|
||||||
|
|
||||||
|
|
||||||
class UserProfile(AbstractUser):
|
|
||||||
GENDER_CHOICES = (
|
|
||||||
("女", "女"),
|
|
||||||
("男", "男"),
|
|
||||||
("未知", "未知"),
|
|
||||||
)
|
|
||||||
objects = UserManager()
|
|
||||||
username = models.CharField(max_length=150, unique=True, db_index=True,
|
|
||||||
verbose_name='username', help_text='用户昵称')
|
|
||||||
secret = models.CharField(max_length=255, default=uuid4, verbose_name='加密秘钥')
|
|
||||||
email = models.CharField(max_length=255, null=True, blank=True, verbose_name="邮箱")
|
|
||||||
mobile = models.CharField(max_length=255, null=True, blank=True, verbose_name="电话")
|
|
||||||
avatar = models.TextField(null=True, blank=True, verbose_name="头像", help_text="头像")
|
|
||||||
|
|
||||||
name = models.CharField(max_length=40, unique=False, null=True,
|
|
||||||
blank=True, verbose_name="姓名")
|
|
||||||
gender = models.CharField(max_length=2, default=GENDER_CHOICES[2][0], choices=GENDER_CHOICES,
|
|
||||||
verbose_name="性别", help_text="性别")
|
|
||||||
remark = models.TextField(null=True, blank=True, verbose_name="备注", help_text="备注")
|
|
||||||
create_datetime = models.DateTimeField(auto_now_add=True, null=True, blank=True,
|
|
||||||
verbose_name=u'创建时间', help_text=u"创建时间")
|
|
||||||
update_datetime = models.DateTimeField(auto_now=True, null=True, blank=True,
|
|
||||||
verbose_name=u'更新时间', help_text=u"更新时间")
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = '用户'
|
|
||||||
verbose_name_plural = verbose_name
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
if self.name:
|
|
||||||
return f"{self.username}({self.name})"
|
|
||||||
return f"{self.username}"
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
from .fields import CreateDateTimeField, DescriptionField, CreatorCharField, \
|
||||||
|
ModifierCharField, UpdateDateTimeField
|
||||||
|
|
||||||
|
|
||||||
|
class BaseModel(models.Model):
|
||||||
|
"""
|
||||||
|
标准抽象模型模型,可直接继承使用
|
||||||
|
"""
|
||||||
|
description = DescriptionField() # 描述
|
||||||
|
update_datetime = UpdateDateTimeField() # 修改时间
|
||||||
|
create_datetime = CreateDateTimeField() # 创建时间
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
verbose_name = '基本模型'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
|
||||||
|
class CoreModel(models.Model):
|
||||||
|
"""
|
||||||
|
核心标准抽象模型模型,可直接继承使用
|
||||||
|
增加审计字段, 覆盖字段时, 字段名称请勿修改, 必须统一审计字段名称
|
||||||
|
"""
|
||||||
|
description = DescriptionField() # 描述
|
||||||
|
creator = CreatorCharField() # 创建者
|
||||||
|
modifier = ModifierCharField() # 修改者
|
||||||
|
update_datetime = UpdateDateTimeField() # 修改时间
|
||||||
|
create_datetime = CreateDateTimeField() # 创建时间
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
verbose_name = '核心模型'
|
||||||
|
verbose_name_plural = verbose_name
|
|
@ -0,0 +1,286 @@
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.db import models
|
||||||
|
from django.db.models import SET_NULL
|
||||||
|
|
||||||
|
from .string_util import uuid_8, uuid_16, uuid_32, uuid_36
|
||||||
|
|
||||||
|
|
||||||
|
class IdField(models.CharField):
|
||||||
|
"""
|
||||||
|
id = IdField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['max_length'] = kwargs.get('max_length', 8)
|
||||||
|
kwargs['primary_key'] = kwargs.get('primary_key', True)
|
||||||
|
kwargs['unique'] = kwargs.get('unique', True)
|
||||||
|
kwargs['db_index'] = kwargs.get('db_index', True)
|
||||||
|
kwargs['default'] = kwargs.get('default', uuid_8)
|
||||||
|
kwargs['null'] = kwargs.get('null', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', False)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', 'ID')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', 'ID')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class UUID8Field(models.CharField):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['max_length'] = kwargs.get('max_length', 8)
|
||||||
|
kwargs['default'] = kwargs.get('default', uuid_8)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', 'UUID')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', 'UUID')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class UUID16Field(models.CharField):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['max_length'] = kwargs.get('max_length', 16)
|
||||||
|
kwargs['default'] = kwargs.get('default', uuid_16)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', 'UUID')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', 'UUID')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class UUID32Field(models.CharField):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['max_length'] = kwargs.get('max_length', 32)
|
||||||
|
kwargs['default'] = kwargs.get('default', uuid_32)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', 'UUID')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', 'UUID')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class UUID36Field(models.CharField):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['max_length'] = kwargs.get('max_length', 36)
|
||||||
|
kwargs['unique'] = kwargs.get('unique', True)
|
||||||
|
kwargs['default'] = kwargs.get('default', uuid_36)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', 'UUID')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', 'UUID')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class DescriptionField(models.TextField):
|
||||||
|
"""
|
||||||
|
description = DescriptionField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['default'] = kwargs.get('default', '')
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '描述')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '描述')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class TextField(models.TextField):
|
||||||
|
"""
|
||||||
|
xxx = TextField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['default'] = kwargs.get('default', '')
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class CharField(models.CharField):
|
||||||
|
"""
|
||||||
|
xxx = CharField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['default'] = kwargs.get('default', '')
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class IntegerField(models.IntegerField):
|
||||||
|
"""
|
||||||
|
xxx = IntegerField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['default'] = kwargs.get('default', 0)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class BooleanField(models.BooleanField):
|
||||||
|
"""
|
||||||
|
xxx = BooleanField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class DateField(models.DateField):
|
||||||
|
"""
|
||||||
|
xxx = DateField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
kwargs['editable'] = kwargs.get('default', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class DateTimeField(models.DateTimeField):
|
||||||
|
"""
|
||||||
|
xxx = DateTimeField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
kwargs['editable'] = kwargs.get('default', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class ForeignKey(models.ForeignKey):
|
||||||
|
"""
|
||||||
|
xxx = ForeignKey()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, to=None, on_delete=None, related_name=None, related_query_name=None, limit_choices_to=None,
|
||||||
|
parent_link=False, to_field=None, db_constraint=False, **kwargs):
|
||||||
|
if on_delete is None:
|
||||||
|
on_delete = SET_NULL
|
||||||
|
if to_field is None:
|
||||||
|
to_field = 'id'
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
kwargs['editable'] = kwargs.get('default', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
super().__init__(to, on_delete, related_name, related_query_name, limit_choices_to, parent_link, to_field,
|
||||||
|
db_constraint, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class OneToOneField(models.OneToOneField):
|
||||||
|
"""
|
||||||
|
xxx = OneToOneField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, on_delete=None, to_field=None, db_constraint=False, **kwargs):
|
||||||
|
if on_delete is None:
|
||||||
|
on_delete = SET_NULL
|
||||||
|
if to_field is None:
|
||||||
|
to_field = 'id'
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
kwargs['editable'] = kwargs.get('default', None)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
super().__init__(*args, on_delete=on_delete, to_field=to_field, db_constraint=db_constraint, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class ManyToManyField(models.ManyToManyField):
|
||||||
|
"""
|
||||||
|
xxx = ManyToManyField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, db_constraint=False, **kwargs):
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '')
|
||||||
|
kwargs['editable'] = kwargs.get('default', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
super().__init__(*args, db_constraint=db_constraint, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class UserForeignKeyField(models.ForeignKey):
|
||||||
|
"""
|
||||||
|
user = UserForeignKeyField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, to=None, on_delete=None, related_name=None, related_query_name=None, limit_choices_to=None,
|
||||||
|
parent_link=False, to_field=None, db_constraint=False, **kwargs):
|
||||||
|
if to is None:
|
||||||
|
to = get_user_model()
|
||||||
|
if to_field is None:
|
||||||
|
to_field = 'id'
|
||||||
|
if on_delete is None:
|
||||||
|
on_delete = SET_NULL
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '关联的用户')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '') or kwargs.get('verbose_name', '关联的用户')
|
||||||
|
kwargs['editable'] = kwargs.get('default', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
super().__init__(to, on_delete, related_name, related_query_name, limit_choices_to, parent_link, to_field,
|
||||||
|
db_constraint, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateDateTimeField(models.DateTimeField):
|
||||||
|
"""
|
||||||
|
update_datetime = ModifyDateTimeField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, verbose_name=None, name=None, auto_now=True, auto_now_add=False, **kwargs):
|
||||||
|
verbose_name = verbose_name or '修改时间'
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '修改时间')
|
||||||
|
kwargs['editable'] = kwargs.get('default', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
super().__init__(verbose_name, name, auto_now, auto_now_add, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class CreateDateTimeField(models.DateTimeField):
|
||||||
|
"""
|
||||||
|
create_datetime = CreateDateTimeField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=True, **kwargs):
|
||||||
|
verbose_name = verbose_name or '创建时间'
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '创建时间')
|
||||||
|
kwargs['editable'] = kwargs.get('default', False)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
super().__init__(verbose_name, name, auto_now, auto_now_add, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class CreatorCharField(CharField):
|
||||||
|
"""
|
||||||
|
creator = CreatorCharField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['max_length'] = kwargs.get('max_length', 255)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '创建者')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '该记录的创建者')
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class ModifierCharField(CharField):
|
||||||
|
"""
|
||||||
|
modifier = ModifierCharField()
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs['max_length'] = kwargs.get('max_length', 255)
|
||||||
|
kwargs['null'] = kwargs.get('null', True)
|
||||||
|
kwargs['blank'] = kwargs.get('blank', True)
|
||||||
|
kwargs['verbose_name'] = kwargs.get('verbose_name', '修改者')
|
||||||
|
kwargs['help_text'] = kwargs.get('help_text', '该记录最后修改者')
|
||||||
|
super().__init__(*args, **kwargs)
|
Loading…
Reference in New Issue