【发布时间】:2017-05-01 16:19:12
【问题描述】:
我的问题如下。我正在从网页上的表格中为患者保存数据。该表单是从 models.py 中的模型定义生成的。我保存的信息是姓名,姓氏等。我有一个使用 multichoiceField 选择的诊断字段,我使用 manytomany 保存它。
保存数据后,将为分配给每个患者的诊断创建一个单独的表,如预期的那样。该表包含诊断及其适用的患者 ID。每个诊断都保存为单独的记录。
除了选择诊断,我还保存了诊断的日期。您将在下面的 models.py 和 form.py 代码中看到我的意思。
我希望将诊断日期也保存在表格中,但我不知道如何执行此操作。我已尝试关注文档:https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany 以及 SO 上的其他一些帖子,但无法弄清楚如何去做。我无法弄清楚需要如何设置视图、表单和模型才能实现。是否有可能做到这一点,如果可以,怎么做?我曾尝试使用具有 manytomany 和“through”的中间模型,但我不明白。对此的任何帮助将不胜感激。
以下是我的代码的简化版本:
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',
]
谢谢, 托马斯
【问题讨论】: