【发布时间】:2014-08-15 08:12:27
【问题描述】:
我正在开发一个专为医生设计的应用程序(基于 django 内置用户模型),它可以跟踪相关患者的治疗进度。我创建了一个存储基本数据(姓名、姓氏等)的患者模型,但它还应该为正在治疗该特定患者的医生存储一个 ForeignKey。我基本上希望每个医生只能看到自己的病人,而不能看到其他医生的病人。这应该以登录医生填写新患者数据的形式无缝完成。尽管患者数据库很常见,但每位医生都应该能够拥有已被其他医生使用的患者姓名。
这是我的简化患者模型:
class Patient(models.Model):
first_name = models.CharField()
second_name = models.CharField()
doctor = models.ForeignKey(User,default="", blank=True, null=True)
class Meta:
unique_together=('first_name','second_name','doctor')
应该能够保存名字和第二个名字而不显示“医生”字段的表单,因为这应该由表单添加以匹配当前登录的用户
class PatientForm(models.Model):
first_name=forms.CharField(widget=TextInput())
last_name=forms.CharField(widget=TextInput())
def __init__(self,user,*args, **kwargs):
super(PatientForm,self).__init__(*args,**kwargs)
self.user = user
class Meta:
model=Patient
exclude = ['doctor']
这是确保当前登录的医生保存在模型的“医生”外键中的视图。
@login_required
def patient_new(request):
if request.method == 'POST':
form = PatientForm(user=request.user,data=request.POST)
if form.is_valid():
bbb=form.save(commit=False)
bbb.doctor = request.user
bbb.save()
return HttpResponseRedirect(reverse('patient'))
else:
print form.errors
else:
form = PacjentForm(user=request.user)
return render_to_response('patient_new.html',{'form':form}, context_instance=RequestContext(request))
但问题是,此解决方案不允许将相同的患者姓名分配给不同的医生(基本上,unique_together 的要求永远不会满足)。这样做的正确方法是什么?
【问题讨论】:
-
我会敦促你重新审视你的逻辑 - 当你这样做
PatientForm(user=request.user)然后bbb.doctor = request.user时,你基本上是在说医生和病人是一样的 -
好的,那么我该如何更改,以便将当前用户在表单中添加到患者模型中?
标签: python django django-models django-forms django-views