Как получить доступ к одному полю при использовании For Loop для итерации по всем полям ModelForm в 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)
The 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'}),
Виды.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>
Теперь я хочу вставить Anchor Tag рядом со всеми полями foreign_key в шаблоне, чтобы добавить новый объект в исходную таблицу. Например, опция Add Patient рядом с выпадающим полем Patient, при нажатии на которую будет появляться новое небольшое окно с формой Patient. Пользователь вводит данные нового пациента, сохраняет их, и то же имя появляется в выпадающем списке.
Но поскольку я использую цикл For Loop в шаблоне, как я смогу получить доступ к этим полям внешнего ключа и применить опции? Есть предложения, пожалуйста?
Если это не проблема, я бы отказался от рендеринга всех полей с помощью 'forloop'. Вместо этого я бы использовал нотацию: form.field для отображения различных полей. Таким образом, это выглядело бы так:
{{ form.patient.label_tag }}
{{ form.patient }}
Так будет намного проще перемещаться по полям, но, конечно, потребуется больше печатать :)