定义用于在 django 中显示 postgres 数据的视图函数

Defining view function for displaying postgres data in django

我在 postgresql 中创建了葡萄酒数据库(包含 ID、名称等),并插入了大约 300 个观察值。 我想在 django 的下拉菜单中显示每种葡萄酒的名称。 urls.py 已正确设置。 到目前为止我做了什么:

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>

postgres 数据库(包含我要显示的数据的列是 name)通过 setings.py 与应用程序连接,但它不显示名称。

我应该如何重新定义我的函数才能在 main.html 下拉菜单中看到显示?

要获取所有对象的列表,必须使用Model.objects.all()

因此请在您的视图中进行这些更改

def showallwines(request):
    wines = ListWines.objects.all() # changed
    # changed context name to wines since it is list of wines not names.
    return render(request, 'main.html', { 'wines': wines } )

main.html

您必须使用上下文名称 wines,因为我们从视图

传递上下文 wines
{% for wine in wines %}
    <option>{{ wine.name }}</option>
{% endfor %}

views.py

而不是 ListWines.objects 使用 ListWines.objects.all() 并使用“showallwines”更新上下文名称。

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