Skip to main content
 首页 » 编程设计

python之Django,用户在应用程序中可以有多个角色,3种类型的用户

2025年01月19日22mayingbao

如标题,我有 3 种类型的用户,每个用户可以有多个角色。

from django.contrib.auth.models import AbstractUser, User 
from django.db import models 
from django.db.models import CASCADE 
from hospital.models import Hospital 
 
class Role(models.Model): 
    ''' 
  The Role entries are managed by the system, 
  automatically created via a Django data migration. 
  ''' 
    DOCTOR = 1 
    DIRECTOR = 2 
    PATIENT = 3 
 
    ROLE_CHOICES = ( 
        (DOCTOR, 'doctor'), 
        (DIRECTOR, 'director'), 
        (PATIENT, 'patient'), 
 
    ) 
 
    id = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, primary_key=True) 
 
    def __str__(self): 
        return self.get_id_display() 
 
 
class User(AbstractUser): 
    roles = models.ManyToManyField(Role) 
 
    def __str__(self): 
        return self.roles 
 
 
class Doctor(models.Model): 
    # role = models.OneToOneField(User, on_delete=CASCADE) 
    career = models.TextField(blank=True, max_length = 1000) 
 
class Director(models.Model): 
    # role = models.OneToOneField(User, on_delete=CASCADE) 
    members = models.ManyToManyField(Doctor) 
 
class Patient(models.Model): 
    # personal information like above. 

https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html

我正在创建一个模型,但我不知道如何设置 key 。

我是引用上面的网站做的。主任拥有医生并可以对其进行授权。

但是我不知道怎么把 key 给医生或主任。

如果您要发表评论,我会收到错误消息。

我希望你能帮助我。

请您参考如下方法:

假设您要为 3 个派生类设置默认的角色。

从 this post 中汲取灵感.

由于 roles 是多对多关系,您可以覆盖模型的 save 方法(您也可以为此使用信号,但不推荐在你的情况下)。

例如

class Doctor(models.Model): 
 
    def save(self, *args, **kwargs): 
        if not self.id: # object creation 
            should_add_role = True 
        super(Doctor, self).save(*args, **kwargs) # do the usual 
        if should_add_role: # add our defaults 
            self.roles.add(Role.objects.get_or_create(id=Role.DOCTOR))