Как я могу перечислить все узлы в моей базе данных? - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать простую модель 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')]

Когда я вызываю этот URL: http://localhost:8000/node Я получаю эту ошибку сейчас:

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

Что такое ошибка NoReverseMatch и как мне исправить мою проблему?Позвольте мне сказать, что я начинающий разработчик Django.Спасибо.

1 Ответ

0 голосов
/ 18 декабря 2018

Проблема в том, что ваш именованный URL-путь node:index не принимает аргументов (предположительно, потому что это представление просто перечисляет все узлы, а не конкретный узел), однако get_absolute_url вашей модели пытается изменить шаблон с помощьюКварг id.Основная проблема - ваш get_absolute_url метод;однако, вы, вероятно, также выиграете от использования общих представлений на основе классов:

urls.py:

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

view.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/

...