Me gustaría enviar un radio_id a mi vista. Ahora estoy tratando de obtener la identificación de mi radio por javascript, pero no sé cómo pasarlo por el método get dentro de mi url y enviarlo a la vista:
html:
<a href="{% url 'maintenance_issue_fix' %}?radio_id=checked"> <img src="{% static 'images/maintenance_list.jpg' %}"> </a> {% for list in issue_list %} <tr style="text-transform: capitalize;"> <td style="text-align:center;"> <input name="radio_id" type="radio" id="radio_id" value="{{list.id}}"> </td> <\tr> {% endfor %}JavaScript:
<script> $(function(){ $('input[type="radio"]').click(function(){ if ($(this).is(':checked')) { var checked = $(this).val(); console.log(checked); } }); }); </script>puntos de vista:
def maintenance_issue_fix(request): if request.method == 'GET': issue_id = request.GET.get('radio_id') print(issue_id)direcciones URL:
urlpatterns = [ path('maintenance_issue_fix/', views.maintenance_issue_fix, name="maintenance_issue_fix"), ]Cuando intento que la var de javascript pase dentro de la url, aparece el siguiente error:
ValueError en /maintenance/maintenance_issue_fix/ literal no válido para
int() con base 10: 'marcado'
¿Cómo hacerlo?
puedes cambiar el valor href de tu enlace así
#you add the url in data <a id="redirect-issue-fix" href="{% url 'maintenance_issue_fix' %}" data-baseurl="{% url 'maintenance_issue_fix' %}"> <img src="{% static 'images/maintenance_list.jpg' %}"> </a> {% for list in issue_list %} <tr style="text-transform: capitalize;"> <td style="text-align:center;"> <input name="radio_id" type="radio" id="radio_id" value="{{list.id}}"> </td> <\tr> {% endfor %}JavaScript:
<script> $(function(){ const link = $('#redirect-issue-fix'); $('input[type="radio"]').click(function(){ if ($(this).is(':checked')) { var checked = $(this).val(); # here you change the href with id of input checked and the baseurl $(link).href = $(link).data('baseurl') + "&radio_id=" + checked; console.log(checked); } }); }); </script>En su etiqueta <a> ha fijado el valor checked para el parámetro de consulta. Es por eso que recibe ValueError : su aplicación espera un número entero como radio_url , pero está enviando una cadena "checked" .
Supongo que desea reemplazar el atributo href (URL de redirección) según la entrada del usuario. Esto debería funcionar:
HTML:
<a href="{% url 'maintenance_issue_fix' %}" id="link"> <img src="{% static 'images/maintenance_list.jpg' %}"> </a> Aquí asigné la identificación del link al elemento <a> para que pueda ser referenciado desde el código JavaScript.
JS:
$(function(){ $('input[type="radio"]').click(function(){ if ($(this).is(':checked')) { let link = $('#link') let currentHref = link.attr("href") let newHref = currentHref.split("?radio_id=")[0] + "?radio_id=" + $(this).val() link.attr("href", newHref); } }); }); Aquí estoy cambiando la URL cada vez que el usuario hace clic en la radio. Tenga en cuenta que si no se selecciona ningún elemento, el elemento <a> redirigirá a {% url 'maintenance_issue_fix' %} sin el parámetro radio_id . Puede cambiarlo si no era el valor predeterminado que deseaba.
PD: debe evitar asignar la misma identificación ( radio_id ) a varios elementos (como lo hizo en el ciclo for). Puede usar {{list.id}} en su lugar.