1 from django.db import models 2 3 4 class User(models.Model): 5 """ 6 用户表 7 """ 8 username = models.CharField(verbose_name='用户名', max_length=32) 9 password = models.CharField(verbose_name='密码', max_length=64) 10 email = models.EmailField(verbose_name='邮箱') 11 12 def __str__(self): 13 return self.username 14 15 16 class Role(models.Model): 17 """ 18 角色表 19 """ 20 caption = models.CharField(verbose_name='角色', max_length=32) 21 22 def __str__(self): 23 return self.caption 24 25 26 class User2Role(models.Model): 27 """ 28 用户角色关系表 29 """ 30 user = models.ForeignKey(User, verbose_name='用户', related_name='roles',on_delete=models.CASCADE) 31 role = models.ForeignKey(Role, verbose_name='角色', related_name='users',on_delete=models.CASCADE) 32 33 def __str__(self): 34 return '%s-%s' % (self.user.username, self.role.caption,) 35 36 37 class Menu(models.Model): 38 """ 39 菜单表 40 """ 41 caption = models.CharField(verbose_name='菜单名称', max_length=32) 42 parent = models.ForeignKey('self', verbose_name='父菜单', related_name='p', null=True, blank=True,on_delete=models.CASCADE) 43 44 def __str__(self): 45 prev = "" 46 parent = self.parent 47 while True: 48 if parent: 49 prev = prev + '-' + str(parent.caption) 50 parent = parent.parent 51 else: 52 break 53 return '%s-%s' % (prev, self.caption,) 54 55 56 class Permission(models.Model): 57 """ 58 权限 59 """ 60 caption = models.CharField(verbose_name='权限', max_length=32) 61 url = models.CharField(verbose_name='URL正则', max_length=128) 62 menu = models.ForeignKey(Menu, verbose_name='所属菜单', related_name='permissions',null=True,blank=True,on_delete=models.CASCADE) 63 64 def __str__(self): 65 return "%s-%s" % (self.caption, self.url,) 66 67 68 class Action(models.Model): 69 """ 70 操作:增删改查 71 """ 72 caption = models.CharField(verbose_name='操作标题', max_length=32) 73 code = models.CharField(verbose_name='方法', max_length=32) 74 75 def __str__(self): 76 return self.caption 77 78 79 class Permission2Action2Role(models.Model): 80 """ 81 权限操作关系表 82 """ 83 permission = models.ForeignKey(Permission, verbose_name='权限URL', related_name='actions',on_delete=models.CASCADE) 84 action = models.ForeignKey(Action, verbose_name='操作', related_name='permissions',on_delete=models.CASCADE) 85 role = models.ForeignKey(Role, verbose_name='角色', related_name='p2as',on_delete=models.CASCADE) 86 87 class Meta: 88 unique_together = ( 89 ('permission', 'action', 'role'), 90 ) 91 92 def __str__(self): 93 return "%s-%s-%s" % (self.permission, self.action, self.role,) 94 95 96 class Others(models.Model): 97 my_choice = [ 98 (1, "Python"), 99 (2, "Linux"), 100 (3, "OpenStack"), 101 (4, "GoLang"), 102 ] 103 my_choice_id = models.IntegerField(choices=my_choice, default=None) # 在html可用obj.get_字段_display显示真实的选项,这里是obj.get_my_choice_id_display。
相关文章: