Django forms template dropdown с уникальным идентификатором для каждой итерации цикла forloop
Я пытаюсь сгенерировать уникальный идентификатор для каждой итерации элемента цикла for. Генерируемый элемент представляет собой выпадающее меню, и количество его генераций зависит от количества активных инцидентов. Проблема заключается в том, что ID выпадающего меню одинаков для каждого выпадающего меню. В данном случае id="id_status" при просмотре через источник страницы браузера
Есть ли способ сгенерировать, например, id="id_status_1" для первого выпадающего списка, затем id="id_status_2" для второго и так далее?
Я пытался реализовать что-то с помощью forloop.counter, а также setAttribute("id", "uniqueIdentifier") от javascript, но уже несколько часов безуспешно ломаю голову
models.py
from django.db import models
...
...
class IncidentStatus(models.Model):
status = models.CharField(max_length=128)
def __str__(self):
return self.status
forms.py:
from .models import IncidentStatus
...
...
class IncidentStatusAssigneeForm(ModelForm):
status = forms.ModelChoiceField(queryset=IncidentStatus.objects.all().order_by('status'), empty_label='Select a Status', label='')
class Meta:
model = IncidentStatus
fields = ('status',)
views.py:
from .models import IncidentStatus
from .forms import IncidentStatusAssigneeForm
...
...
def set_status(req):
all_statuses_a = IncidentStatusAssigneeForm()
all_incidents = Incident.objects.all
...
...
context = {'all_statuses_a': all_statuses_a, 'all_incidents': all_incidents, ....}
return render(req, 'incident_main/assignee.html', context)
template.html:
{% for incident in all_incidents %}
{{ all_statuses_a }}
{% endfor %}
просмотр исходного результата страницы
<select name="status" required id="id_status">
<option value="" selected>Select a Status</option>
<option value="9">Acknowledged</option>
<option value="12">General status update</option>
<option value="2">In Progress (assessment and diagnostics)</option>
<option value="10">In Progress (repairs/remedial action)</option>
<option value="3">Pending (awaiting feedback from requestor)</option>
<option value="5">Pending (awaiting parts/tools)</option>
<option value="4">Pending (call logged with service provider)</option>
<option value="7">Resolved</option>
</select>
Приведенный выше результат будет одинаковым для всех итераций цикла for, поскольку каждый выпадающий элемент привязан к своей задаче. Как можно видеть, сгенерированный ID имеет значение id="id_status". Это значение я пытаюсь сделать уникальным для каждого выпадающего списка
Я помещу это как ответ на данный момент, поскольку это слишком длинно для комментария, а затем я удалю/откорректирую его.
Если я правильно понимаю, что вам нужно, то вам не нужен набор форм для IncidentStatus, более того, возможно, вам вообще не нужна модель IncidentStatus вообще . Похоже, что у вас есть около 10-15 различных вариантов выбора статуса, поэтому вы можете просто использовать choices в вашей модели Incident
. Затем вы можете использовать formset, а именно modelformset, но не для IncidentStatus
, а скорее для Incident
. Тогда вам не нужно будет делать итерации, фабрика наборов форм будет создавать новую форму для каждого объекта в модели Incident, со своей собственной формой.