作为标题,我有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.
我正在创建一个模型,但我不知道如何设置密钥。
我是通过参考上述网站制作的。导演拥有医生并可以授权。
但我不知道如何给医生或导演一把钥匙。
如果我发表评论,我会收到错误。
我希望你能帮助我。
答案 0 :(得分:1)
假设您要为3个派生类设置默认roles
。
从this post获取灵感。
由于roles
是多对多关系,因此您可以覆盖模型的save
方法(您也可以使用此信号,但在您的情况下不建议这样做)。
e.g。
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))