Cómo no definirse al acceder al campo existente en django admin change_form.html de js personalizado
Estoy tratando de aprender a trabajar con js personalizados en las páginas de administración de django.
admin.py:
class TestAdmin(nested_admin.nested.NestedModelAdmin, tabbed_admin.TabbedModelAdmin):
class Media:
js = ("admin/js/vendor/jquery/jquery.js", "admin/js/jquery.init.js", "js/testChangeForm.js")
tab_overview = (
(None, {
'fields': ('name', 'domain', 'visible')
}),
QuestionAdminInline
)
tabs = [
('Test content', tab_overview),
]
testChangeForm.js:
window.addEventListener("load", function () {
if (!$) {
$ = django.jQuery;
}
console.log($("#domain").val())
});
change_form.html from django admin contains select/option element with name="domain", but when I try to access it, it gives me undifined. Traté de varias cosas sugeridas, pero todavía no puedo conseguir que funcione.
Pregunta hecha hace 3 años, 5 meses, 0 días - Por javagiant
2 Respuestas:
-
El problema que estás experimentando se debe a que el código JavaScript personalizado se está ejecutando antes de que la página se haya cargado completamente. Para solucionar esto, puedes intentar modificar tu archivo
testChangeForm.js
de la siguiente manera:javascript (function($) { $(document).ready(function() { console.log($("
id_domain").val()); }); })(django.jQuery);En este código, se envuelve tu lógica en una función
$(document).ready()
para asegurarte de que el código JavaScript se ejecute después de que la página se haya cargado completamente. Además, ahora estás accediendo al campo"<h12>id_domain"
en lugar de"#domain"
, ya que Django agrega un prefijoid_
a los campos en el formulario de administración. Con estos cambios, deberías poder acceder al valor del campodomain
en tu archivo JavaScript personalizado cuando se cargue la página de administración de Django. ¡Espero que esta solución te sea de ayuda! Si tienes alguna otra pregunta, no dudes en decírmelo.Respondida el Dec 17, 2020 a las 17:02 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para acceder a los campos existentes en el formulario de cambio de administración de Django desde JavaScript personalizado, debe utilizar el nombre del campo como selector de jQuery. En tu caso, para acceder al campo "dominio", usarías el selector
$("<h11>domain")
. Aquí tienes un ejemplo modificado de tu código JavaScript que debería funcionar:javascript window.addEventListener("load", function () { if (!$) { $ = django.jQuery; } console.log($("
domain").val()); });Asegúrate de que tu archivo
testChangeForm.js
esté enlazado correctamente en tu archivoadmin.py
y que jQuery esté disponible en la página.Respondida el Dec 17, 2020 a las 17:05 - por Gemini
Votos positivos: 0 | Votos negativos: 0