feat: base 增加parentmodel
This commit is contained in:
		
							parent
							
								
									7c080d9198
								
							
						
					
					
						commit
						c28f7546f3
					
				|  | @ -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.db import models | ||||
| 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 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -13,7 +13,7 @@ class DataFilter(models.IntegerChoices): | |||
|     MYSELF = 60, '仅本人' | ||||
| 
 | ||||
| 
 | ||||
| class Permission(BaseModel): | ||||
| class Permission(ParentModel, BaseModel): | ||||
|     """ | ||||
|     功能权限:目录,菜单,按钮 | ||||
|     """ | ||||
|  | @ -29,8 +29,6 @@ class Permission(BaseModel): | |||
|     type = models.PositiveSmallIntegerField( | ||||
|         '类型', choices=menu_type_choices, default=30) | ||||
|     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) | ||||
| 
 | ||||
|     def __str__(self): | ||||
|  | @ -42,14 +40,12 @@ class Permission(BaseModel): | |||
|         ordering = ['sort'] | ||||
| 
 | ||||
| 
 | ||||
| class Dept(CommonAModel): | ||||
| class Dept(ParentModel, CommonAModel): | ||||
|     """ | ||||
|     部门 | ||||
|     """ | ||||
|     name = models.CharField('名称', max_length=60) | ||||
|     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) | ||||
|     third_info = models.JSONField('三方系统信息', default=dict) | ||||
| 
 | ||||
|  | @ -61,7 +57,6 @@ class Dept(CommonAModel): | |||
|     def __str__(self): | ||||
|         return self.name | ||||
| 
 | ||||
| 
 | ||||
| class Role(CommonADModel): | ||||
|     """ | ||||
|     角色 | ||||
|  | @ -88,8 +83,6 @@ class Post(CommonADModel): | |||
|     name = models.CharField('名称', max_length=32) | ||||
|     code = models.CharField('岗位标识', max_length=32, null=True, blank=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) | ||||
|     max_hour = models.PositiveSmallIntegerField('最长在岗时间', default=12) | ||||
| 
 | ||||
|  | @ -178,14 +171,12 @@ class UserPost(BaseModel): | |||
|         unique_together = ('user', 'post', 'dept') | ||||
| 
 | ||||
| 
 | ||||
| class DictType(CommonAModel): | ||||
| class DictType(ParentModel, CommonAModel): | ||||
|     """ | ||||
|     数据字典类型 | ||||
|     """ | ||||
|     name = 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: | ||||
|         verbose_name = '字典类型' | ||||
|  | @ -196,7 +187,7 @@ class DictType(CommonAModel): | |||
|         return self.name | ||||
| 
 | ||||
| 
 | ||||
| class Dictionary(CommonAModel): | ||||
| class Dictionary(ParentModel, CommonAModel): | ||||
|     """ | ||||
|     数据字典 | ||||
|     """ | ||||
|  | @ -207,8 +198,6 @@ class Dictionary(CommonAModel): | |||
|     type = models.ForeignKey( | ||||
|         DictType, on_delete=models.CASCADE, verbose_name='类型') | ||||
|     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) | ||||
| 
 | ||||
|     class Meta: | ||||
|  |  | |||
|  | @ -53,6 +53,20 @@ class SoftDeletableManager(SoftDeletableManagerMixin, models.Manager): | |||
|     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): | ||||
|     """ | ||||
|     基本表 | ||||
|  | @ -69,12 +83,19 @@ class BaseModel(models.Model): | |||
|     class Meta: | ||||
|         abstract = True | ||||
| 
 | ||||
|     def handle_parent(self): | ||||
|         pass | ||||
| 
 | ||||
|     def save(self, *args, **kwargs) -> None: | ||||
|         # 出现了雪花ID重复, 先这样异常处理一下;已经修改了snowflake, 以防万一, 这里依然保留 | ||||
|         gen_id = False | ||||
|         if not self.id: | ||||
|             gen_id = True | ||||
|             self.id = idWorker.get_id() | ||||
| 
 | ||||
|         # 处理父级 | ||||
|         self.handle_parent() | ||||
| 
 | ||||
|         try: | ||||
|             return super().save(*args, **kwargs) | ||||
|         except IntegrityError as e: | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue