您可以使用 Django 1.5 的新可配置用户模型来完成此操作。您可以查看文档here。
为了给您一个总体思路,您将用户模型扩展到 AbstractUser 并添加其他字段以创建医生和患者之间的链接关系。如果患者只能有一个医生,而一个医生可以有很多患者,则可以使用 ForeignKey 关系;如果患者可以有很多医生,则可以使用多对多关系。我下面的例子是使用 ForeignKey:
class PHRUser(AbstractUser):
phr_relate = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
token = models.EmailField(null=True, blank=True)
USER_CHOICES = (
('1', 'Doctor'),
('2', 'Patient')
)
user_type = models.CharField(choices=USER_CHOICES, max_length=10)
然后在您的注册中,您可以实现以下内容:
def UserRegistration(request):
if request.method == 'POST':
form = UserCreateForm(request.POST)
if form.is_valid():
data = request.POST.copy()
# if user that is registering is a doctor, token is their own email. otherwise their token is their doctor's email and
# their relation is their doctor
if data.__getitem__('user_type') == '1':
data.__setitem__('token', data.__getitem__('email'))
else:
doctor = PHRUser.objects.get(email=data.__getitem__('token'))
data.__setitem__('phr_relate', staker.id)
data.__setitem__('token', '')
new_user = form.save(data)
return HttpResponseRedirect('/')
然后在您的视图中,您可以实现一个实用功能,例如:
def user_relation(request, owner):
if (request.user.email == owner.email) or (request.user.email == owner.token):
return True
将记录所有者的用户对象作为owner传入,函数将:
- 如果登录用户是医生并且他们正在尝试查看其授权的患者记录,则返回 True
- 如果登录用户是患者并且他们正在尝试查看自己的记录,则返回 True
- 否则返回 False
你可以使用这个函数来检查你应该在你的视图中为这个请求显示什么。
您可能需要做一些修改才能使您的实现正确,但这应该可以帮助您开始。