Django Ошибка страницы не принимает аргумент при нажатии на ссылку на нее
Я боролся с одной из моих страниц в django. В основном я создаю граф (узлы и ребра), где вы можете добавлять и удалять узлы через формы. У меня есть модель графа (GraphDetail), которая требует узлов, и я создаю форму узла (GraphCreateNode), которая добавляет узлы в граф. Однако ссылка не работает. В ней говорится, что GraphCreateNode не принимает никаких аргументов. Теперь CreateGraphNode нужен id графа, в который он будет добавлен, отправляется ли он по url или хранится и доступен в сессии, у меня нет предпочтений. Сейчас я пытаюсь сделать это через url. И как уже было сказано, я получаю ошибку, и я не могу понять, где мне нужно ее исправить, поэтому я и спрашиваю всех вас.
Сообщение об ошибке:
TypeError at /graphs/graph/74921f18-ed5f-4759-9f0c-699a51af4307/graph_add_node/
GraphCreateNode() takes no arguments
Поэтому я поискал здесь, чтобы узнать, что можно найти: Что такое ошибка NoReverseMatch, и как ее исправить? была довольно информативной, но не достаточно. Затем я нашел TypeError: CraiglistScraper() не принимает аргументов, в то время как речь шла о Selinum, там упоминалось что-то о конструкторе. У моего класса нет конструктора, но нужен ли он ему? Или проблема в другом.
Вот два представления. GraphDetail и GraphCreateNode. Я нахожусь на странице GraphDetail и нажимаю ссылку для перехода к GraphCreateNode
GraphDetail:
class GraphDetailView(generic.DetailView):
model = Graph
slug_field = '<uuid:id>'
slug_url_kwarg = '<uuid:id>'
GraphCreateNode:
class GraphCreateNode:
def add_a_node(request):
new_node = get_object_or_404(Node, pk)
if request.method == "POST":
form = AddNodeForm(request.post)
if form.is_valid():
new_node.name = form.cleaned_data['name']
new_node.summary = form.cleaned_data['summary']
new_node.description = form.cleaned_data['description']
new_node.due_date = form.cleaned_data['due_date']
new_node.completed = form.cleaned_data['completed']
new_node.neighbor_nodes = form.cleaned_data['neighbor_nodes']
new_node.tags = form.cleaned_data['tags']
new_node.save()
graph = Graph.objects.get(pk=pk)
graph.nodes.add(new_node)
graph.save()
return HttpResponseRedirect(reverse('graph-detail') )
else:
form = AddNodeForm()
graph = Graph.objects.get(pk=pk)
context = {
'form': form,
'graph': graph,
}
return render(request, 'graphs/graph_add_node.html')
Вот две html страницы
GraphDetail, который работает, поэтому я включил только ту часть, где я затем нажимаю, чтобы перейти к GraphCreateNode
{% else %}
<p>There are no nodes assigned to this Graph.</p>
{% endif %}
<p><a href="{% url 'graph-create-node' graph.pk %}">Add Node</a></p>
<hr>
html-код GraphCreateNode:
{% extends "base_generic.html" %}
<h1>Adding a node to graph: {{ graph.name }} </h1>
<form action="" method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit">
</form>
{% block content %}
{% endblock %}
Вот ссылки.
path('graph/<uuid:pk>', views.GraphDetailView.as_view(), name='graph-detail'),
path('graph/<uuid:pk>/graph_add_node/', views.GraphCreateNode, name= 'graph-create-node'),
Вот модель для формы узла.
from django.forms import ModelForm
from .models import Node
class AddNodeForm(ModelForm):
class Meta:
model = Node
fields = ['name', 'summary', 'description', 'due_date', 'completed', 'neighbor_nodes', 'tags']
Я все еще новичок в Django и мне трудно понять, как я должен отправить идентификатор графа с первой страницы graphdetails в GraphCreateNode. Дайте мне знать, если мне нужно добавить больше информации или прояснить ситуацию.