feat: base 增加parentmodel
This commit is contained in:
parent
2d7f1152ff
commit
a590eb298b
|
@ -0,0 +1,53 @@
|
||||||
|
# Generated by Django 3.2.12 on 2024-06-05 02:11
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0003_alter_permission_parent'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='post',
|
||||||
|
name='parent',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='dept',
|
||||||
|
name='parent_link',
|
||||||
|
field=models.JSONField(blank=True, default=list, editable=False, verbose_name='父级关联'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='dictionary',
|
||||||
|
name='parent_link',
|
||||||
|
field=models.JSONField(blank=True, default=list, editable=False, verbose_name='父级关联'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='dicttype',
|
||||||
|
name='parent_link',
|
||||||
|
field=models.JSONField(blank=True, default=list, editable=False, verbose_name='父级关联'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='permission',
|
||||||
|
name='parent_link',
|
||||||
|
field=models.JSONField(blank=True, default=list, editable=False, verbose_name='父级关联'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dept',
|
||||||
|
name='parent',
|
||||||
|
field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='父'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dictionary',
|
||||||
|
name='parent',
|
||||||
|
field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dictionary', verbose_name='父'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dicttype',
|
||||||
|
name='parent',
|
||||||
|
field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dicttype', verbose_name='父'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,7 +1,7 @@
|
||||||
from django.contrib.auth.models import UserManager
|
from django.contrib.auth.models import UserManager
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import AbstractUser
|
from django.contrib.auth.models import AbstractUser
|
||||||
from apps.utils.models import CommonADModel, CommonAModel, CommonBModel, BaseModel, SoftDeletableManagerMixin
|
from apps.utils.models import ParentModel, CommonADModel, CommonAModel, CommonBModel, BaseModel, SoftDeletableManagerMixin
|
||||||
from django_celery_beat.models import IntervalSchedule, CrontabSchedule
|
from django_celery_beat.models import IntervalSchedule, CrontabSchedule
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ class DataFilter(models.IntegerChoices):
|
||||||
MYSELF = 60, '仅本人'
|
MYSELF = 60, '仅本人'
|
||||||
|
|
||||||
|
|
||||||
class Permission(BaseModel):
|
class Permission(ParentModel, BaseModel):
|
||||||
"""
|
"""
|
||||||
功能权限:目录,菜单,按钮
|
功能权限:目录,菜单,按钮
|
||||||
"""
|
"""
|
||||||
|
@ -29,8 +29,6 @@ class Permission(BaseModel):
|
||||||
type = models.PositiveSmallIntegerField(
|
type = models.PositiveSmallIntegerField(
|
||||||
'类型', choices=menu_type_choices, default=30)
|
'类型', choices=menu_type_choices, default=30)
|
||||||
sort = models.PositiveSmallIntegerField('排序标记', default=1)
|
sort = models.PositiveSmallIntegerField('排序标记', default=1)
|
||||||
parent = models.ForeignKey('self', null=True, blank=True,
|
|
||||||
on_delete=models.SET_NULL, verbose_name='父', db_constraint=False)
|
|
||||||
codes = models.JSONField('权限标识', default=list, null=True, blank=True)
|
codes = models.JSONField('权限标识', default=list, null=True, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
@ -42,14 +40,12 @@ class Permission(BaseModel):
|
||||||
ordering = ['sort']
|
ordering = ['sort']
|
||||||
|
|
||||||
|
|
||||||
class Dept(CommonAModel):
|
class Dept(ParentModel, CommonAModel):
|
||||||
"""
|
"""
|
||||||
部门
|
部门
|
||||||
"""
|
"""
|
||||||
name = models.CharField('名称', max_length=60)
|
name = models.CharField('名称', max_length=60)
|
||||||
type = models.CharField('类型', max_length=20, default='dept')
|
type = models.CharField('类型', max_length=20, default='dept')
|
||||||
parent = models.ForeignKey('self', null=True, blank=True,
|
|
||||||
on_delete=models.SET_NULL, verbose_name='父')
|
|
||||||
sort = models.PositiveSmallIntegerField('排序标记', default=1)
|
sort = models.PositiveSmallIntegerField('排序标记', default=1)
|
||||||
third_info = models.JSONField('三方系统信息', default=dict)
|
third_info = models.JSONField('三方系统信息', default=dict)
|
||||||
|
|
||||||
|
@ -61,7 +57,6 @@ class Dept(CommonAModel):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class Role(CommonADModel):
|
class Role(CommonADModel):
|
||||||
"""
|
"""
|
||||||
角色
|
角色
|
||||||
|
@ -88,8 +83,6 @@ class Post(CommonADModel):
|
||||||
name = models.CharField('名称', max_length=32)
|
name = models.CharField('名称', max_length=32)
|
||||||
code = models.CharField('岗位标识', max_length=32, null=True, blank=True)
|
code = models.CharField('岗位标识', max_length=32, null=True, blank=True)
|
||||||
description = models.CharField('描述', max_length=50, blank=True, null=True)
|
description = models.CharField('描述', max_length=50, blank=True, null=True)
|
||||||
parent = models.ForeignKey('self', null=True, blank=True,
|
|
||||||
on_delete=models.SET_NULL, verbose_name='父')
|
|
||||||
min_hour = models.PositiveSmallIntegerField('最小在岗时间', default=0)
|
min_hour = models.PositiveSmallIntegerField('最小在岗时间', default=0)
|
||||||
max_hour = models.PositiveSmallIntegerField('最长在岗时间', default=12)
|
max_hour = models.PositiveSmallIntegerField('最长在岗时间', default=12)
|
||||||
|
|
||||||
|
@ -178,14 +171,12 @@ class UserPost(BaseModel):
|
||||||
unique_together = ('user', 'post', 'dept')
|
unique_together = ('user', 'post', 'dept')
|
||||||
|
|
||||||
|
|
||||||
class DictType(CommonAModel):
|
class DictType(ParentModel, CommonAModel):
|
||||||
"""
|
"""
|
||||||
数据字典类型
|
数据字典类型
|
||||||
"""
|
"""
|
||||||
name = models.CharField('名称', max_length=30)
|
name = models.CharField('名称', max_length=30)
|
||||||
code = models.CharField('标识', max_length=30)
|
code = models.CharField('标识', max_length=30)
|
||||||
parent = models.ForeignKey('self', null=True, blank=True,
|
|
||||||
on_delete=models.SET_NULL, verbose_name='父')
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '字典类型'
|
verbose_name = '字典类型'
|
||||||
|
@ -196,7 +187,7 @@ class DictType(CommonAModel):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
class Dictionary(CommonAModel):
|
class Dictionary(ParentModel, CommonAModel):
|
||||||
"""
|
"""
|
||||||
数据字典
|
数据字典
|
||||||
"""
|
"""
|
||||||
|
@ -207,8 +198,6 @@ class Dictionary(CommonAModel):
|
||||||
type = models.ForeignKey(
|
type = models.ForeignKey(
|
||||||
DictType, on_delete=models.CASCADE, verbose_name='类型')
|
DictType, on_delete=models.CASCADE, verbose_name='类型')
|
||||||
sort = models.PositiveSmallIntegerField('排序', default=1)
|
sort = models.PositiveSmallIntegerField('排序', default=1)
|
||||||
parent = models.ForeignKey('self', null=True, blank=True,
|
|
||||||
on_delete=models.SET_NULL, verbose_name='父')
|
|
||||||
is_used = models.BooleanField('是否有效', default=True)
|
is_used = models.BooleanField('是否有效', default=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -53,6 +53,20 @@ class SoftDeletableManager(SoftDeletableManagerMixin, models.Manager):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ParentModel(models.Model):
|
||||||
|
parent = models.ForeignKey('self', null=True, blank=True,
|
||||||
|
on_delete=models.SET_NULL, verbose_name='父', db_constraint=False)
|
||||||
|
parent_link = models.JSONField('父级关联', default=list, blank=True, editable=False)
|
||||||
|
|
||||||
|
def handle_parent(self):
|
||||||
|
if hasattr(self, "parent_link") and self.parent:
|
||||||
|
new_link = self.parent.parent_link
|
||||||
|
new_link.append(self.parent.id)
|
||||||
|
self.parent_link = new_link
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
class BaseModel(models.Model):
|
class BaseModel(models.Model):
|
||||||
"""
|
"""
|
||||||
基本表
|
基本表
|
||||||
|
@ -69,12 +83,19 @@ class BaseModel(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
def handle_parent(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def save(self, *args, **kwargs) -> None:
|
def save(self, *args, **kwargs) -> None:
|
||||||
# 出现了雪花ID重复,不知道怎么处理,先这样异常处理一下;已经修改了snowflake, 以防万一, 这里依然保留
|
# 出现了雪花ID重复,不知道怎么处理,先这样异常处理一下;已经修改了snowflake, 以防万一, 这里依然保留
|
||||||
gen_id = False
|
gen_id = False
|
||||||
if not self.id:
|
if not self.id:
|
||||||
gen_id = True
|
gen_id = True
|
||||||
self.id = idWorker.get_id()
|
self.id = idWorker.get_id()
|
||||||
|
|
||||||
|
# 处理父级
|
||||||
|
self.handle_parent()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return super().save(*args, **kwargs)
|
return super().save(*args, **kwargs)
|
||||||
except IntegrityError as e:
|
except IntegrityError as e:
|
||||||
|
|
Loading…
Reference in New Issue