soy nuevo en django framework, en mi aplicación tengo dos modelos, BoardsList y BoardLink:
class BoardsList(models.Model): master_code = models.CharField(max_length=6, primary_key=True) uc_code = models.CharField(max_length=20) description = models.CharField(max_length=200) customer_name = models.CharField(max_length=30) def __str__(self): return "MASTER_CODE = " + self.master_code class BoardLink(models.Model): boardsList = models.ForeignKey(BoardsList, on_delete=models.CASCADE) configuration_sheet_link = models.CharField(max_length=300) wiring_diagram_link = models.CharField(max_length=300) def __str__(self): return self.boardsList_idY las vistas relativas son:
class BoardsListView(generic.ListView): template_name = 'index.html' context_object_name = 'boards_list' paginate_by = 75 def get_queryset(self): query_filter = self.request.GET.get("find_master", None) if query_filter is not None: return BoardsList.objects.filter(Q(master_code__contains=query_filter) | Q(uc_code__contains=query_filter) | Q(customer_name__contains=query_filter)).order_by('customer_name') return BoardsList.objects.order_by('master_code') class BoardLinkView(generic.DetailView): template_name = 'index.html' context_object_name = 'board_link_list' paginate_by = 1 def get_queryset(self): query_filter = self.request.GET.get("find_master_link", None) if query_filter is not None: return BoardLink.objects.filter(Q(boardsList__exact=query_filter))en mi página html, mostré correctamente los datos de la lista de tableros en una tabla:
<tbody> {% for board in boards_list %} <tr> <td>{{ board.master_code }}</td> <td>{{ board.uc_code }}</td> <td>{{ board.description }}</td> <td>{{ board.customer_name }}</td> <td> <form method="GET" action=""> <button type="button" class="btn" name="find_master_link" data-bs-toggle="modal" data-bs-target="#boardLinksModal"> <i class="fa-solid fa-file-lines"></i> </button> </form> </td> </tr> {% endfor %} </tbody>ahora mi problema es cómo puedo obtener el registro de datos del modelo BoardLink en el evento de clic de botón y mostrarlo en la ventana emergente modal de arranque que ya he creado e incluirlo en mi página html con:
{% include 'modalPopUp.html' %}mi código modal es el mismo del ejemplo de documentación de arranque.
gracias de antemano por las respuestas!!
Esta es realmente una pregunta sobre cómo funcionan las plantillas. Lo que debe comprender es que cuando un cliente solicita una página a un servidor django, la vista django muestra la plantilla antes de enviarla de vuelta al navegador. Esto significa que procesa todas las etiquetas dinámicas de la plantilla y las convierte en una página html estática, que envía al navegador que la solicita.
Esto incluye la etiqueta {% include 'page.html'%} , que por cierto, es genial.
Cuando se procesa una plantilla, si hay etiquetas {% include 'page.html'%} dentro, lo que sucede es que los archivos html a los que se hace referencia se recuperan, se procesan en html estático y finalmente se incrustan en la plantilla raíz.
Todo se envía en una sola página html estática al navegador del cliente. Esto significa que si bien puede dividir su plantilla en varios archivos para mantenerla ordenada, cuando la página se envía a un cliente, tiene la forma de un archivo html completamente estático único, que se creó resolviendo todos los componentes dinámicos. en forma de django template tags .
Espero haber sido claro hasta ahora..
Si entendió mi explicación, también comprenderá que cada subplantilla que se incluye en la plantilla raíz también tiene acceso a las mismas variables de contexto que la propia plantilla raíz.
Entonces, en su caso, si incluye un poco de html que contiene un modal de arranque, puede hacer referencia a las mismas variables de contexto disponibles en la página que contiene la etiqueta de inclusión. Así que adelante, intente agregar {{ boards_list }} o {{ board_link_list }} en su cuerpo modal y verá que funciona de inmediato.
PS BoardLinkView es un DetailView y su context_object_name es board_link_list , lo cual es muy engañoso porque no es una lista. ¡Lo cambiaría si fuera tú!