from django.contrib.auth.models import AbstractUser from django.db import models from websites.models import Website class User(AbstractUser): ROLE_CHOICES = [ ('admin', '管理员'), ('manager', '分管理'), ('user', '普通用户'), ] role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='user', help_text="用户角色") managed_websites = models.ManyToManyField( Website, blank=True, related_name="managers", help_text="分管理可管理的网站" ) authorized_websites = models.ManyToManyField( Website, blank=True, related_name="authorized_users", help_text="普通用户被授权可访问的网站" ) source_manager = models.ForeignKey( "self", null=True, blank=True, on_delete=models.SET_NULL, related_name="brought_users", limit_choices_to={"role": "manager"}, verbose_name="所属分管理" ) def is_admin(self): return self.role == 'admin' def is_manager(self): return self.role == 'manager' def is_user(self): return self.role == 'user' def __str__(self): return f"{self.username} ({self.get_role_display()})"