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 prefijo id_ a los campos en el formulario de administración. Con estos cambios, deberías poder acceder al valor del campo domain 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 archivo admin.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