我正在编写一个django网络应用程序,用于模拟医院员工和患者可以登录的应用程序。患者,护士和医生都有不同的权限,模型需要存储不同的信息。我目前正在尝试创建一个包含所有公共字段的用户配置文件模型,然后为每种类型的员工创建单独的模型,每个模型都具有oneToOneField(UserProfile)属性。我想知道如何从我的views.py文件中分辨出哪种类型的用户登录。例如,是否可以执行以下操作:
if request.user.is_patient():
show patient form
elif request.user.is_doctor:
show doctor form
到目前为止,这是我在models.py中的内容:
class BaseUser(models.Model):
user = models.OneToOneField(User)
username = models.CharField(max_length=30)
firstName = models.CharField(max_length=50)
middleName = models.CharField(max_length=50)
lastName = models.CharField(max_length=50)
sex = models.CharField(max_length=10)
address = models.CharField(max_length=200)
email = models.CharField(max_length=50)
phone = models.CharField(max_length=10)
User.profile = property(lambda u: BaseUser.objects.get_or_create(user=u)[0])
class PatientUser(models.Model):
user = models.OneToOneField(BaseUser)
existingConditions = models.TextField()
prescriptions = models.TextField()
答案 0 :(得分:1)
好了,既然您已经创建了自定义BaseUser
模型,那么您可以在该类中设置一组属性来识别它。
这是一个粗略的例子,您可以用它来在视图中测试用户的性质:
class BaseUser(models.Model):
def is_patient(self):
try:
self.patientuser
except PatientUser.DoesNotExist:
return False
else:
return True
def is_doctor(self):
try:
self.doctoruser
except DoctorUser.DoesNotExist:
return False
else:
return True
然后,在您看来,您可以简单地:
if request.user.baseuser.is_doctor():
show doctor form
elif request.user.baseuser.is_patient():
show patient form
要确保您的用户与基本用户相关联,您可以查看User
模型的post-save signal。您可以查看如何为这些信号here注册操作。
以下是一个非常简单的示例:
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(pre_save, sender=User)
def my_handler(sender, **kwargs):
BaseUser.objects.create(user=sender, ...)