在我的健康应用中,我试图让用户输入患者症状数据并保存。
我的应用包含Identity
,Symptom
和IdentitySymptom
型号。
ManyToManyField
和Identity
之间存在Symptom
。
IdentitySymptom 模型包含两个ForeignKey字段,每个字段引用标识和症状模型。
在我的观察文档中,我使用了基于类的视图来确保我创建的每个症状对象都附加到患者身上。
问题
鉴于ManyToManyField
关系,如果我更新symptom object
,那么当然会更新与patients objects
相关的所有symptom object
。问题在于,当我创建新的patient object
时,该对象自动具有先前创建的患者的症状对象。那是一个错误。新的患者对象不应该有任何症状,因为我还没有创建与它相关的symptom object
。
每个nomenclature
和description
字段都应附加到为其创建的患者对象。但是,每次填充和保存字段时,所有创建的患者中都会看到nomenclature
和description
,这不是我想要的。
在Tashoy和Qadi之下,nomenclature
和description
相同,但我只点击了Tashoy Beckford锚标nomenclature
和description
如何确保只有Tashoy Beckford拥有Symptom object
数据。
基本上我想确保相关症状与相关患者有关。
以下是代码:
模型
class Identity(models.Model):
NIS =models.CharField(max_length = 200, primary_key = True)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
time_patient_creation = models.DateTimeField(auto_now = True)
first_name = models.CharField(max_length = 80, null = True)
last_name = models.CharField(max_length = 80, null = True )
contact = models.CharField(max_length = 15, null = True)
location = models.CharField(max_length = 100, blank = True)
born = models.DateField(auto_now = False, auto_now_add = False, blank = True, null = True)
patient_key = models.ManyToManyField('Symptom')
class Symptom(models.Model):
nomenclature = models.CharField(max_length = 80, default = '')
description = models.TextField(max_length = 1000, default = '')
class IdentitySymptom(models.Model):
identity = models.ForeignKey(Identity)
key_medical = models.ForeignKey(Symptom)
视图
from django.shortcuts import render, redirect
from django.views.generic import CreateView, ListView
from script.forms import IdentityForm, MedicalForm
from script.models import Identity, Symptom, IdentitySymptom
class Identity_view(CreateView):
model = Identity
template_name = 'script/script.html'
def get(self, request):
form = IdentityForm()
script = Identity.objects.filter(user = request.user)
var = {'form':form, 'script':script}
return render(request, self.template_name, var)
def post(self, request):
form = IdentityForm(request.POST)
being = None
if form.is_valid():
NIS = form.save(commit = False)
NIS.user = request.user
NIS.save()
being = form.cleaned_data['NIS']
form = IdentityForm()
return redirect('script:script')
var = {'form': form, 'being':being }
return render(request, self.template_name, var)
class Identity_list_view(ListView):
model = Identity
template_name = 'script/identity_list.html'
def get(self, request):
form = IdentityForm()
script = Identity.objects.filter(user = request.user)
var = {'form':form, 'script':script}
return render(request, self.template_name, var)
class Medical_document(CreateView):
model = Symptom
template_name = 'script/medical_document.html'
def get(self, request, pk):
form = MedicalForm
script = Symptom.objects.all()
var = {'form':form, 'script':script, 'pk':pk}
return render(request, self.template_name, var)
def post(self, request, pk):
form = MedicalForm(request.POST)
state = None
if form.is_valid():
manuscript = form.save(commit = False)
manuscript.user = request.user
state = form.cleaned_data['description']
manuscript.save()
patient = Identity.objects.get(pk=pk)
medical_key = IdentitySymptom.objects.create(patient = patient, manuscript = manuscript)
medical_key.patient.patient_key.add(manuscript)
form = MedicalForm()
redirect('script:script')
else:
print(form.errors)
var = {'form': form, 'state': state, 'pk':pk}
return render(request, self.template_name, var)