You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from django.contrib.auth.models import AbstractUser
from django.db import models
from ERP_5.utils.base_model import BaseModel
class Menu(BaseModel):
"""菜单功能的模型类"""
number = models.IntegerField('排序数字', blank=True, null=True)
url = models.CharField('菜单访问的URL', max_length=256, blank=True, null=True)
name = models.CharField('菜单名字', max_length=50)
# 父菜单对象parent
parent = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)
class Meta:
db_table = 't_menu'
verbose_name = '功能菜单'
verbose_name_plural = verbose_name
ordering = ['number']
def __str__(self):
return self.name
# ERP系统的操作用户模型类默认是采用django自带的User需要配置settings
class UserModel(AbstractUser):
phone = models.CharField('手机号码', max_length=11, unique=True, blank=True, null=True)
real_name = models.CharField('真实姓名', max_length=128, blank=True, null=True)
roles = models.ManyToManyField('RolesModel', db_table='t_users_roles', blank=True, verbose_name='用户所拥有的角色列表')
dept = models.ForeignKey('DeptModel', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='用户所在的部门')
class Meta:
db_table = 't_user'
verbose_name = '功能菜单'
verbose_name_plural = verbose_name
ordering = ['id']
def __str__(self):
return self.username
class PermissionsModel(BaseModel):
"""
权限模型
"""
method_choices = (
('POST', ''),
('DELETE', ''),
('PUT', ''),
('PATCH', '改局部'),
('GET', '')
)
"""
只要是choices参数的字段 如果你想要获取对应信息 固定写法 get_字段名_display()
print(permission.method)
print(permission.get_method_display())
"""
name = models.CharField(max_length=50, verbose_name='权限名')
is_menu = models.BooleanField(verbose_name='是否为菜单', default=True) # True为菜单,False为接口
# 操作 , 如果是菜单(非接口),method
method = models.CharField(max_length=8, blank=True, default='', choices=method_choices, verbose_name='请求方法')
path = models.CharField(max_length=200, blank=True, default='', verbose_name='请求路径')
# 资源
menu = models.ForeignKey('Menu', null=True, blank=True, related_name='permissions_list', on_delete=models.CASCADE)
desc = models.CharField(max_length=512, blank=True, default='', verbose_name='权限描述')
def __str__(self):
return self.name
class Meta:
db_table = 't_permissions'
verbose_name = '权限'
verbose_name_plural = verbose_name
ordering = ['id']
class RolesModel(BaseModel):
"""
角色
"""
name = models.CharField(max_length=32, unique=True, verbose_name='角色名字')
permissions = models.ManyToManyField('PermissionsModel', db_table='t_roles_permissions',
blank=True, verbose_name='权限')
# 注意在用户模型中最好也要加ManyToManyField
def __str__(self):
return self.name
class Meta:
db_table = 't_roles'
verbose_name = '角色'
verbose_name_plural = verbose_name
class DeptModel(BaseModel):
"""
组织架构 部门
"""
name = models.CharField(max_length=32, unique=True, verbose_name='部门')
parent = models.ForeignKey('self', null=True, blank=True, related_name='children', on_delete=models.CASCADE, verbose_name='父部门')
address = models.CharField(max_length=128, blank=True, default='', verbose_name='部门地址')
def __str__(self):
return self.name
class Meta:
db_table = 't_dept'
verbose_name = '部门'
verbose_name_plural = verbose_name