我的问题如下。我正在从网页上的表格中保存患者的数据。表单由models.py中的模型定义生成。我保存的信息是姓名,姓氏等。我有一个用于诊断的字段,使用multichoiceField选择,我使用manytomany保存它 保存数据后,将为预期分配给每位患者的诊断创建单独的表。该表包含诊断及其适用的患者ID。每个诊断都保存为单独的记录。 除了选择诊断之外,我还保存了诊断的日期。您将在下面的models.py和form.py代码中看到我的意思 我想将诊断的日期也保存在表格中,但我无法弄清楚如何做到这一点。我尝试过关注文档:https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany以及SO上的其他一些帖子,但无法弄清楚如何做到这一点。我无法弄清楚需要如何设置视图,表单和模型才能实现。有可能这样做,如果是这样的话怎么样?我尝试过使用一个很多很多的中间模型和#39;到#,但我不明白。对此的任何帮助将不胜感激。
以下是我的代码的简化版本:
models.py:
class diagnosisChoices(models.Model): #This represents the list in the drop down menu for the different diagnosis.
diagnosis = models.CharField(max_length = 50)
def __str__(self):
return self.diagnosis
class PatientData(models.Model):
Name = models.CharField(max_length=100)
Surname = models.CharField(max_length=100)
dateOfBirth = models.DateField(default = datetime.datetime.now())
diagnosis = models.ManyToManyField(
'diagnosisChoices',
#on_delete=models.CASCADE,
)
views.py:
def patientDataView(request):
uId = request.user.id
if request.method == "POST":
form = PatientDataForm(request.POST)
if form.is_valid():
model_instance = form.save(commit=False)
model_instance.timestamp = timezone.now()
model_instance.save()
#model_instance.add(uId)
form.save_m2m()
return HttpResponseRedirect('/dataBase')
else:
form = PatientDataForm()
return render(request, "dataBaseTest.html", {'form': form})
date_of_diagnosis = models.DateField(default=datetime.datetime.now())
forms.py
from django.forms import ModelForm
from django import forms
from .models import PatientData
from .models import diagnosisChoices #This is the list of diagnosis in the dropdown
from django.forms import extras
import datetime
from functools import partial
class PatientDataForm(ModelForm):
class Meta:
now = datetime.datetime.now()
thisYear = now.year
DateInput = partial(forms.DateInput, {'class': 'datepicker'})
widgets = {
}
model = PatientData
fields = ['Name',
'Surname',
'dateOfBirth',
'diagnosis',
'date_of_diagnosis',
]
谢谢, 托马斯
答案 0 :(得分:0)
你没有得到的主要内容是models.py,所以我会专注于它。
您需要使用三个表来执行您所描述的内容:diagnosisData
,PatientData
和'成员资格'我称之为diagnosisPatient
的表格。然后你建立你的模型:
class diagnosisChoices(models.Model):
diagnosis = models.CharField(max_length = 50)
class PatientData(models.Model):
Name = models.CharField(max_length=100)
Surname = models.CharField(max_length=100)
dateOfBirth = models.DateField(default = datetime.datetime.now())
diagnosis = models.ManyToManyField('diagnosisChoices',through='diagnosisPatient')
class diagnosisPatient(models.Model):
patient = models.ForeignKey('PatientData')
diagnosis = models.ForeignKey('diagnosisChoices')
dateOfDiagnosis = models.DateField()
以这种方式构建模型后,您应该像往常一样保存PatientData
和diagnosisChoices
个实例。对于多对多关系,您应该使用适当的外键和日期在diagnosisPatient
表上手动保存它。您可以像往常一样使用PatientData
函数查询objects.all()
模型中的多对多关系。
要记住的是,django中的ManyToMany关系总是在幕后为您创建一个新的成员资格表。因此,当您不需要在关系上插入额外信息时,diagnosisPatient
表只由两个外键组成,并且它是隐藏的。关于这种关系的直接论证只是让这个表格显而易见,并让你控制回来放置你喜欢的任何新关系。