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

标签 python django django-models

如标题,我有 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))

关于python - Django,用户在应用程序中可以有多个角色,3种类型的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48849954/

相关文章:

django - 我需要一个小部件来浏览文件系统

python - OpenCV2 - 在实例化 VideoWriter 对象时抑制压缩对话框

python - 在稀疏设计矩阵上使用 rpy2 运行 glmnet?

python - 卡夫卡超时错误 ('Failed to update metadata after 60.0 secs.' )

python - django模型过滤字段的字段

Django rest framework JWT,删除jwt token

django - 在 Django 中建模产品订单

python - 按二维数组中的特定行标识符对列求和

python - 不想永远运行 if 语句

python - django 异构查询集代理模型