【发布时间】:2014-10-23 13:22:28
【问题描述】:
我必须与外键关联的表。
具有主键 patient_id(必需)和具有外键患者的诊断的人口统计表。我创建了两个表格。我将字段保存在第一个表单上,然后在诊断表单中自动完成患者字段。
问题是,当我尝试在诊断表单上保存字段的值时,我在第一个表单上收到错误消息,显示“此字段是必需的”,即使该字段的值在一分钟前存储。
已编辑:这是我的解决方案
input.html(模板)
<form class="form-horizontal" method="post">
{% csrf_token %}
<div class="tabbable">
<ul class="nav nav-tabs">
<li class="active">
<a href="#1" data-toggle="tab">Demographics</a>
</li>
<li>
<a href="#2" data-toggle="tab">Diagnosis</a>
</li>
<li>
<a href="#3" data-toggle="tab">A_b_sickle</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade in active" id="1">
<input type="hidden" name="form_id" value="demographics">
<p>{%crispy frm%}</p>
</div>
<div class="tab-pane fade" id="2">
<!-- form controls to be continued here -->
<input type="hidden" name="form_id" value="diagnosis">
{%crispy frm_d%}
<p>Howdy, I'm in Section 2.</p>
</div>
<div class="tab-pane fade" id="3">
<!-- form controls to be continued here -->
<input type="hidden" name="form_id" value="a_b_s">
{%crispy frm_a_b_s%}
<p>Howdy, I'm in Section 3.</p>
</div>
</div>
</div>
<!--<input type="submit" name='submit' value="Submit">-->
</form>
我的 view.py 包含:
def input(request):
if request.method == 'POST':
my_demographics = DemographicForm(request.POST, prefix="demo")
my_diagnosis = DiagnosisForm(request.POST, prefix='diag')
my_a_b_sickle= A_b_sickle_thalForm(request.POST,prefix='a_b_s')
if my_demographics.is_valid() and my_diagnosis.is_valid() and my_a_b_sickle.is_valid:
my_demographics_object = my_demographics.save()
my_diagnosis_object = my_diagnosis.save(commit=False)
my_diagnosis_object.patient = my_demographics_object
my_diagnosis_object.save()
my_a_b_sickle_object = my_a_b_sickle.save(commit=False)
my_a_b_sickle_object.patient = my_demographics_object
my_a_b_sickle_object.save()
else:
my_demographics = DemographicForm(prefix='demo')
my_diagnosis = DiagnosisForm(prefix='diag')
my_a_b_sickle= A_b_sickle_thalForm(prefix='a_b_s')
return render_to_response('input.html', {'frm':my_demographics, 'frm_d': my_diagnosis, 'frm_a_b_s': my_a_b_sickle}, context)
models.py
class demographic(models.Model):
national_health_care_pat_id = models.IntegerField('National Health Care patient id', null=True,blank=True)
patient_hospital_file_number = models.IntegerField(null=True,blank=True)
patient_id = models.IntegerField(unique= True ,primary_key=True)
def __str__(self):
return str(self.patient_id)
class diagnosis(models.Model):
patient = models.ForeignKey(demographic)
age_of_diagnosis = models.IntegerField(null=True,blank=True)
def __str__(self):
return str(self.patient_id)
forms.py
class DemographicForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(DemographicForm, self).__init__(*args, **kwargs)
self.helper=FormHelper(self)
self.fields['date_of_birth'].widget = widgets.AdminDateWidget()
self.helper.layout = Layout(
'national_health_care_pat_id',
'patient_hospital_file_number',
'patient_id',
FormActions(
Submit('submit', "Save changes"),
Submit('cancel', "Cancel")
),
)
self.helper.form_tag = False
self.helper.form_show_labels = True
class Meta:
model = demographic
exclude = []
class DiagnosisForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(DiagnosisForm, self).__init__(*args, **kwargs)
self.helper=FormHelper(self)
self.helper.layout = Layout(
'patient',
'age_of_diagnosis',
FormActions(
Submit('submit', "Save changes"),
Submit('cancel',"Cancel")
),
)
self.helper.form_tag = False
self.helper.form_show_labels = True
class Meta:
model = diagnosis
exclude = []
您知道问题可能是什么吗?提前谢谢!
【问题讨论】:
-
能否将模型和表单类添加到代码示例中?
-
@Brando 是的,当然!我添加了它们。
-
您没有将数据传递到
DiagnosisForm,只是传递到DemographicForm -
@Anentropic 你能说得更具体点吗?我做错了什么?
-
@zinon 你真的应该在 Python 中以大写字母开头你的类名,以将它们与实例变量区分开来。
标签: python django django-forms django-views