首页 > 解决方案 > 如何列出数据库中的所有节点?

问题描述

我正在尝试创建一个简单的模型Node和一个简单的网页,在列表中显示我的所有节点。但它似乎不起作用,每次我更改代码时都会出现新错误。所以我放弃了,来到了这里。这就是我所做的:我创建了一个Node模型:

class Node(models.Model):
    ID = models.DecimalField(max_digits=9, decimal_places=6)
    nb_solenoid = models.DecimalField(max_digits=9, decimal_places=6, null=True, blank=True)
    connexion = models.CharField(max_length=255)

    def get_absolute_url(self):
        return reverse("node:index", kwargs={"id": self.id})

使用这种形式:

class NodeForm(forms.ModelForm):
ID = forms.DecimalField(initial=0)
nb_solenoid = forms.DecimalField(initial=1)
connexion = forms.CharField(required=False,
                            widget=forms.Textarea(
                                  attrs={
                                      "placeholder": "type of connexion"
                                  }))
    class Meta:
        model = Node
        fields = [
            'ID',
            'nb_solenoid',
            'connexion'
        ]

这是我的views.py:

def index(request):
    queryset = Node.objects.all()
    context = {
        "object_list": queryset
    }
    return render(request, "node/index.html", context)

这是我在 urls.py 中的代码:

urlpatterns = [path('', views.index, name='index')]

当我调用此网址时:http://localhost:8000/node我现在收到此错误:

NoReverseMatch at /node
Reverse for 'index' with keyword arguments '{'id': 1}' not found. 1 pattern(s) tried: ['node$']

什么是 NoReverseMatch 错误,我该如何解决我的问题?让我说我是一名 Django 初学者开发人员。谢谢你。

标签: python-3.xdjango-2.0

解决方案


问题是您的命名 url 路径node:index没有参数(可能是因为该视图只是列出了所有节点,而不是特定节点),但是您的模型get_absolute_url正试图用id. 核心问题是你的get_absolute_url方法;但是,您真的很可能也会从使用基于类的通用视图中受益:

网址.py:

urlpatterns = [
  path('nodes/', NodeList.as_view(), name="node-list"),
  path('node/<id>/', NodeDetail.as_view(), name="node-detail")
]

视图.py:

from django.views.generic import ListView, DetailView

from .models import Node


class NodeList(ListView):
   model = Node


class NodeDetail(DetailView):
   model = Node

模型.py:

class Node(models.Model):
  <snip>
    def get_absolute_url(self):
        return reverse("node-detail", kwargs={"id": self.id})

我真的应该提到,基于类的通用视图的文档位于:https ://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/


推荐阅读