在使用 For Loop 遍历 Django 模板中 ModelForm 的所有字段时,如何访问单个字段?
How do I access a single field while using For Loop to iterate through all the fields of a ModelForm in Django Template?
我有一个模型有四个 ForeignKey 字段,所以它们是表单中的下拉字段。
class Package(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE)
diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE)
treatment=models.ForeignKey(Treatment, on_delete=CASCADE)
patient_type=models.ForeignKey(PatientType, on_delete=CASCADE)
date_of_admission=models.DateField(default=None)
max_fractions=models.IntegerField(default=None)
total_package=models.DecimalField(max_digits=10, decimal_places=2)
forms.py:
class PackageForm(ModelForm):
class Meta:
model=Package
fields='__all__'
widgets={
"patient_type" : forms.Select(attrs={"onblur":"mf();"}),
"max_fractions" : forms.NumberInput(attrs={"onfocus":"mf();", "onblur":"tp();"}),
"total_package" : forms.NumberInput(attrs={"onfocus":"tp();", "onblur":"onLoad();"}),
'date_of_admission': DateInput(attrs={'type': 'date'}),
views.py:
def package_view(request):
if request.method=='POST':
fm_package=PackageForm(request.POST, prefix='package_form')
if fm_package.is_valid():
package=fm_package.save()
IpdReport.objects.create(patient=package.patient, package=package)
fm_package=PackageForm(prefix='package_form')
return render (request, 'account/package.html', {'form5':fm_package})
else:
fm_package=PackageForm(prefix='package_form')
return render (request, 'account/package.html', {'form5':fm_package})
模板:
<form action="" method="post" novalidate>
{% csrf_token %}
{{form5.non_field_errors}}
{% for fm in form5 %}
<div>
{{fm.label_tag}}
{{fm}}
<span>{{fm.errors|striptags}}</span><br><br>
</div>
{% endfor %}
<button type="submit" id="savebtn">Save</button>
</form>
现在,我想要的是在模板中的所有 foreign_key 字段旁边插入一个锚标记,以将新对象添加到原始 table 中。例如,当单击患者下拉字段旁边的添加患者选项时,一个新的小 window 将与患者表格一起显示。用户输入新患者的数据并保存,下拉列表中会显示相同的姓名。
但是当我在模板中使用 For 循环时,我如何才能访问那些外键字段并应用选项?请问有什么建议吗?
如果这不是问题,我会放弃使用 'forloop' 渲染所有字段。相反,我会使用符号:form.field 来呈现不同的字段。所以它看起来像:
{{ form.patient.label_tag }}
{{ form.patient }}
以这种方式浏览字段应该容易得多,但当然需要更多的输入:)
我有一个模型有四个 ForeignKey 字段,所以它们是表单中的下拉字段。
class Package(models.Model):
patient=models.ForeignKey(Patient, on_delete=CASCADE)
diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE)
treatment=models.ForeignKey(Treatment, on_delete=CASCADE)
patient_type=models.ForeignKey(PatientType, on_delete=CASCADE)
date_of_admission=models.DateField(default=None)
max_fractions=models.IntegerField(default=None)
total_package=models.DecimalField(max_digits=10, decimal_places=2)
forms.py:
class PackageForm(ModelForm):
class Meta:
model=Package
fields='__all__'
widgets={
"patient_type" : forms.Select(attrs={"onblur":"mf();"}),
"max_fractions" : forms.NumberInput(attrs={"onfocus":"mf();", "onblur":"tp();"}),
"total_package" : forms.NumberInput(attrs={"onfocus":"tp();", "onblur":"onLoad();"}),
'date_of_admission': DateInput(attrs={'type': 'date'}),
views.py:
def package_view(request):
if request.method=='POST':
fm_package=PackageForm(request.POST, prefix='package_form')
if fm_package.is_valid():
package=fm_package.save()
IpdReport.objects.create(patient=package.patient, package=package)
fm_package=PackageForm(prefix='package_form')
return render (request, 'account/package.html', {'form5':fm_package})
else:
fm_package=PackageForm(prefix='package_form')
return render (request, 'account/package.html', {'form5':fm_package})
模板:
<form action="" method="post" novalidate>
{% csrf_token %}
{{form5.non_field_errors}}
{% for fm in form5 %}
<div>
{{fm.label_tag}}
{{fm}}
<span>{{fm.errors|striptags}}</span><br><br>
</div>
{% endfor %}
<button type="submit" id="savebtn">Save</button>
</form>
现在,我想要的是在模板中的所有 foreign_key 字段旁边插入一个锚标记,以将新对象添加到原始 table 中。例如,当单击患者下拉字段旁边的添加患者选项时,一个新的小 window 将与患者表格一起显示。用户输入新患者的数据并保存,下拉列表中会显示相同的姓名。
但是当我在模板中使用 For 循环时,我如何才能访问那些外键字段并应用选项?请问有什么建议吗?
如果这不是问题,我会放弃使用 'forloop' 渲染所有字段。相反,我会使用符号:form.field 来呈现不同的字段。所以它看起来像:
{{ form.patient.label_tag }}
{{ form.patient }}
以这种方式浏览字段应该容易得多,但当然需要更多的输入:)