簡體   English   中英

如何在Django模型中存儲當前用戶

[英]How to store current User in Django model

我正在為醫生設計的應用程序(基於django內置的User模型),可跟蹤相關患者的治療進度。 我創建了一個可以存儲基本數據(姓名,姓氏等)的“患者”模型,但是它也應該向正在治療該特定患者的醫生存儲“外鍵”。 我基本上希望每個醫生只能看自己的病人,而不能看其他醫生的病人。 這應該以登錄醫生填寫新患者數據的形式無縫完成。 盡管患者數據庫很常見,但每個醫生都應該能夠擁有另一個醫生已經使用過的患者姓名。

這是我簡化的患者模型:

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

該表格應能夠保存名字和名字而無需顯示“ 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']

這是確保當前登錄醫生保存在模型的“醫生” ForeignKey中的視圖。

@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)。 正確的做法是什么?

通過查看其他解決方案,我最終得到了這個解決方案,該解決方案基本上可以確保將用戶傳遞給表單,並且該表單正在驗證患者對於該特定醫生是否唯一。 該模型保持不變,我更改了表單:

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

並且view.py更改:

@login_required
def patient_new(request):
    if request.method == 'POST':
        form = PatientForm(request.POST,request=request)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('patient'))
        else: 
            print form.errors
     else:
        form = PacjentForm(request=request)
return render_to_response('patient_new.html',{'form':form}, context_instance=RequestContext(request))

希望對別人有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM