如何在Django mod中存储当前用户

2024-04-23 07:44:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个专为医生设计的应用程序(基于django内置的用户模型),它可以跟踪相关患者的治疗进度。我已经创建了一个病人模型,它存储了基本数据(姓名、姓氏等),但它还应该存储一个外文密钥给治疗这个特定患者的医生。我基本上希望每个医生只能看自己的病人,不能看其他医生的病人。这应该在登录医生填写新患者数据的表单中无缝完成。尽管病人的数据库是通用的,每个医生都应该能够有一个病人的名字已经被另一个医生使用。在

以下是我简化的患者模型:

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')

表单,该表单应能够保存名字和第二个名字,而不显示“医生”字段,因为表单应该添加此字段以匹配当前登录的用户

^{pr2}$

这里的视图确保当前登录的医生保存在模型的“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_的需求在一起永远不会被满足)。正确的方法是什么?在


Tags: 用户name模型form患者表单modelsrequest
1条回答
网友
1楼 · 发布于 2024-04-23 07:44:13

通过查看其他解决方案,我最终找到了这个解决方案,它基本上确保用户被传递到表单,并且表单正在验证患者对于这个特定的医生是否是唯一的。 模型保持不变,我改变了形式:

class PatientForm(forms.modelForm):
    first_name=forms.CharField(widget=TextInput())
    last_name=forms.CharField(widget=TextInput())

    def __init__(self,user,*args, **kwargs):
         self.request = kwargs.pop('request')            
         return super(PatientForm,self).__init__(*args,**kwargs)

    def clean(self):
         cleaned_data=self.cleaned_data
         try:
             Patient.objects.get(first_name=cleaned_data['first_name'], last_name=cleaned_data['last_name'],doctor=self.request.user)
         except Patient.DoesNotExist:
             pass
         else:
             raise ValidationError('A Patient with this name already exists')

    def save(self,*args, **kwargs):
         kwargs['commit']=False
         obj = super(PatientForm.self).save(*args,**kwargs)
         if self.request:
               obj.doctor = self.request.user
         obj.save()

    class Meta:
        model=Patient
        exclude = ['doctor']

以及视图.py更改:

^{pr2}$

希望能帮助别人!在

相关问题 更多 >