Django (HTML) - Кликабельный ярлык в шаблоне (не работает)
Я работаю над проектом Django, где я хотел бы использовать некоторые настроенные формы флажков, когда появилась эта проблема. Оба куска кода абсолютно одинаковы, но используют разные формы. Проблема возникает, когда в первом примере метка кликабельна (поэтому я могу скрыть радиокнопку), а во втором не работает как ожидалось, пользователь должен нажать на радиокнопку, если я ее скрою, вся метка становится бесполезной.
РАБОТАЕТ ПРАВИЛЬНО:
<form action="" class="form-group" method="POST">
<div class="modal-body">
<div class="row">
<div class="col">
<ul>
{% csrf_token %}
<fieldset >
{% for radio in form_emp.producto %}
<li style="list-style-type:none">
<span class="radio">{{ radio.tag }}
<label class="label" for="{{ radio.id_for_label }}">
{{ radio.choice_label }}
</label>
</span>
</li>
{% endfor %}
</fieldset>
</ul>
</div>
<div class="col">
{{form_emp.cantidad.label}}
{{form_emp.cantidad}}
{{form_emp.observaciones.label}}
{{form_emp.observaciones}}
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-light" type="button" data-bs-dismiss="modal">Volver</button>
<input type="submit" class="btn btn-primary" value="Agregar" />
</div>
НЕ РАБОТАЕТ ДОЛЖНЫМ ОБРАЗОМ:
<form action="" class="form-group" method="POST">
<div class="modal-body">
<div class="row">
<div class="col">
<ul>
{% csrf_token %}
<fieldset >
{% for radio in form_pizzas.producto %}
<li style="list-style-type:none">
<span class="radio">{{ radio.tag }}
<label class="label" for="{{ radio.id_for_label }}">
{{ radio.choice_label }}
</label>
</span>
</li>
{% endfor %}
</fieldset>
</ul>
</div>
<div class="col">
{{form_pizzas.cantidad.label}}
{{form_pizzas.cantidad}}
{{form_pizzas.observaciones.label}}
{{form_pizzas.observaciones}}
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-light" type="button" data-bs-dismiss="modal">Volver</button>
<input type="submit" class="btn btn-primary" value="Agregar" />
</div>
CSS-файл
label{
width: 100%;
border: 3px solid #1881f9;
position: relative;
margin: 5% 5% 5% 5%;
border-radius: 10px;
background-color: rgb(178, 201, 243);
transition: 5ms;}
input[type="radio"]:checked+label{
background-color: orange;
border: 6px solid #f95818;
box-shadow: 5px 5px rgb(178, 201, 243);}
Надеюсь, вы, ребята, поможете мне разобраться, что там происходит! Заранее большое спасибо! Хорошей недели!
Проблема была в том, что я показывал несколько форм в одном представлении, по умолчанию tag-id формы - "id_columnname_n", поэтому несколько форм не позволяли правильно определить теги. id метки повторялся. Я решил эту проблему, введя собственные идентификаторы в файл forms.py и задавая вручную каждый тег-метку в шаблоне.
FORMS.py
class CartEmpanadasForm(ModelForm):
#LISTA DE PRODUCTOS, FILTRO POR CATEGORÍA
lista_prod=Producto.objects.filter(categoria=1)
#MOSTRAR LOS ELEMENTOS COMO UN CHOICEFIELD
producto=forms.ModelChoiceField(widget=forms.RadioSelect(attrs={'name': 'empanada','id':'empanada'}), queryset=lista_prod)
class Meta:
model=Cart
fields=["producto","cantidad","observaciones"]
VIEW.html
<fieldset >
{% for radio in form_emp.producto %}
<li style="list-style-type:none">
<span class="radio">{{ radio.tag }}
<label class="label" for="empanada_{{forloop.counter0}}">
{{ radio.choice_label }}
</label>
</span>
</li>
{% endfor %}