es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Definición de la función de vista para mostrar datos de Postgres en Django.

He creado la base de datos wines en postgresql (que contiene ID, nombres, etc.) e inserté alrededor de 300 observaciones.
Me gustaría mostrar los nombres de cada vino en un menú desplegable con django. Los urls.py están configurados correctamente.
¿Qué he hecho hasta ahora?

models.py

from django.db import connection
from django.db import models

class ListWines(models.Model):
    name = models.CharField(max_length=200)

views.py

from django.shortcuts import render
from wineapp.models import ListWines

def showallwines(request):
    wines = ListWines.objects
    return render(request, 'main.html', { 'name':wines } )

main.html

<!DOCTYPE html>
<head>
    <body>
        <select>
            <option disabled="True" selected="">Select your favourite wine!</option>
            {% for wines in showallwines %}
            <option>{{wines.name}}</option>
            {% endfor %}
        </select>
    </body>
</head>

La base de datos postgres (la columna que contiene los datos que quiero mostrar es “name”) está conectada a la aplicación a través de settings.py, sin embargo, no muestra los nombres.

¿Cómo debo redefinir mis funciones para ver la visualización en el menú desplegable de main.html?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar los nombres de todos los vinos en un menú desplegable utilizando Django, debes realizar los siguientes cambios en tu código:

    models.py

    Asegúrate de que tu modelo se cree correctamente y tenga los campos necesarios. En este caso, debería tener un campo name que almacene el nombre del vino:

    from django.db import models
    
    class Wine(models.Model):
        name = models.CharField(max_length=200)
    

    views.py

    En tu archivo views.py, necesitas definir una función que recupere todos los objetos de vino de tu base de datos y los pase a la plantilla. También asegúrate de pasar los objetos en un diccionario:

    from django.shortcuts import render
    from .models import Wine
    
    def showallwines(request):
        wines = Wine.objects.all()
        return render(request, 'main.html', {'wines': wines})
    

    main.html

    En tu archivo de plantilla, debes recorrer todos los objetos que se pasaron desde la vista y mostrar sus nombres en un menú desplegable:

    <!DOCTYPE html>
    <html>
    <head>
        <title>¡Selecciona tu vino favorito!</title>
    </head>
    <body>
        <select>
            <option disabled="" selected="">¡Selecciona tu vino favorito!</option>
            {% for wine in wines %}
            <option>{{ wine.name }}</option>
            {% endfor %}
        </select>
    </body>
    </html>
    

    Asegúrate de que el campo name en la etiqueta option coincida con el nombre del campo en tu modelo.

    Después de hacer estos cambios, deberías poder ver un menú desplegable con todos los nombres de vinos en tu base de datos.

Comments are closed.