python - django.urls.exceptions.NoReverseMatch
问题描述
我是 Django 的新手。在代码中,“pembekal”是指供应商。当我单击“New stok”按钮时 - 它会创建新书或其他新项目,但它会给出如下错误:
django.urls.exceptions.NoReverseMatch: Reverse for 'stok_create' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['books/(?P<pk>[0-9]+)/create/$']
模型.py
from django.db import models
from django.contrib.auth.models import User
class Pembekal(models.Model):
pembekal = models.CharField(max_length=50, unique=True)
alamat = models.CharField(max_length=50)
telefon = models.CharField(max_length=20)
def __str__ (self):
return self.pembekal
class Stok(models.Model):
stok = models.CharField(max_length=50, unique=True)
pembekal = models.ForeignKey(Pembekal, on_delete=models.CASCADE, related_name='stoks')
def __str__ (self):
return self.jenis_stok
视图.py
from django.shortcuts import render, get_object_or_404
from django.http import JsonResponse
from django.template.loader import render_to_string
from django.urls import reverse
from .models import Pembekal
from .forms import PembekalForm, StokForm
def pembekal_list(request):
pembekals = Pembekal.objects.all()
return render(request, 'books/book_list.html', {'pembekals': pembekals})
def stok_list(request, pk):
pembekal = Pembekal.objects.get(pk=pk)
return render(request, 'books/stok_list.html', {'pembekal':pembekal})
def save_pembekal_form(request, form, template_name):
data = dict()
if request.method == 'POST':
if form.is_valid():
form.save()
data['form_is_valid'] = True
pembekals = Pembekal.objects.all()
data['html_book_list'] = render_to_string('books/includes/partial_book_list.html', {'pembekals': pembekals})
else:
data['form_is_valid'] = False
context = {'form': form}
data['html_form'] = render_to_string(template_name, context, request=request)
return JsonResponse(data)
def pembekal_create(request):
if request.method == 'POST':
form = PembekalForm(request.POST)
else:
form = PembekalForm()
return save_pembekal_form(request, form, 'books/includes/partial_book_create.html')
def save_stok_form(request, form, template_name):
data = dict()
if request.method == 'POST':
if form.is_valid():
form.save()
data['form_is_valid'] = True
stoks = Stok.objects.all()
data['html_book_list'] = render_to_string('books/includes/partial_stok_list.html', {'stoks': stoks})
else:
data['form_is_valid'] = False
context = {'form': form}
data['html_form'] = render_to_string(template_name, context, request=request)
return JsonResponse(data)
def stok_create(request, pk):
pembekal = get_object_or_404(Pembekal, pk=pk)
if request.method == 'POST':
form = StokForm(request.POST, instance=pembekal)
else:
form = StokForm(instance=pembekal)
return save_stok_form(request, form, 'books/includes/partial_stok_create.html')
def pembekal_update(request, pk):
pembekal = get_object_or_404(Pembekal, pk=pk)
if request.method == 'POST':
form = PembekalForm(request.POST, instance=pembekal)
else:
form = PembekalForm(instance=pembekal)
return save_pembekal_form(request, form, 'books/includes/partial_book_update.html')
def pembekal_delete(request, pk):
pembekal = get_object_or_404(Pembekal, pk=pk)
data = dict()
if request.method == 'POST':
pembekal.delete()
data['form_is_valid'] = True
pembekals = Pembekal.objects.all()
data['html_book_list'] = render_to_string('books/includes/partial_book_list.html',
{'pembekals': pembekals})
else:
context = {'pembekal': pembekal}
data['html_form'] = render_to_string('books/includes/partial_book_delete.html',
context, request=request)
return JsonResponse(data)
表格.py
from django import forms
from .models import Pembekal, Stok
class PembekalForm(forms.ModelForm):
class Meta:
model = Pembekal
fields = ('pembekal', 'alamat', 'telefon',)
class StokForm(forms.ModelForm):
class Meta:
model = Stok
fields = ('stok',)
网址.py
urlpatterns = [
path('', TemplateView.as_view(template_name='home.html'), name='home'),
path('books/', views.pembekal_list, name='book_list'),
path('books/create/', views.pembekal_create, name='book_create'),
path('books/<int:pk>/', views.stok_list, name='stok_list'),
path('books/<int:pk>/update/', views.pembekal_update, name='book_update'),
path('books/<int:pk>/delete/', views.pembekal_delete, name='book_delete'),
path('books/<int:pk>/create/', views.stok_create, name='stok_create'),
path('admin/', admin.site.urls),
]
stok_list.html
{% extends 'base.html' %}
{% load static %}
{% block javascript %}
<script src="{% static 'books/js/books.js' %}"></script>
{% endblock %}
{% block content %}
<div class="container">
<ol class="breadcrumb my-4">
<li class="breadcrumb-item"><a href="{% url 'book_list' %}">Pembekals</a></li>
<li class="breadcrumb-item active">{{ pembekal.pembekal }}</li>
</ol>
</div>
<p>
<button type="button" class="btn btn-primary js-create-book" data-url="{% url 'stok_create' pk=pembekal.pk %}">
<span class="glyphicon glyphicon-plus"></span>
New stok
</button>
</p>
<table class="table" id="book-table">
<thead>
<tr>
<th>#</th>
<th>Stok</th>
<th></th>
</tr>
</thead>
<tbody>
{% include 'books/includes/partial_stok_list.html' %}
</tbody>
</table>
<div class="modal fade" id="modal-book">
<div class="modal-dialog">
<div class="modal-content">
</div>
</div>
</div>
{% endblock %}
partial_stok_create.html
<form method="post" action="{% url 'stok_create' pk=pembekal.pk %}" class="js-book-create-form">
{% csrf_token %}
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title">Create a new stok</h4>
</div>
<div class="modal-body">
{% include 'books/includes/partial_stok_form.html' %}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Create stok</button>
</div>
</form>
partial_stok_form.html
{% load widget_tweaks %}
{% for field in form %}
<div class="form-group{% if field.errors %} has-error{% endif %}">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class="form-control" %}
{% for error in field.errors %}
<p class="help-block">{{ error }}</p>
{% endfor %}
</div>
{% endfor %}
partial_stok_list.html
{% for stok in pembekal.stoks.all %}
<tr>
<td>{{ stok.id }}</td>
<td><a href="#">{{ stok.stok }}</a></td>
<td style="width: 150px">
<button type="button"
class="btn btn-warning btn-sm js-update-book"
data-url="#">
<span class="glyphicon glyphicon-pencil"></span> Edit
</button>
<button type="button"
class="btn btn-danger btn-sm js-delete-book"
data-url="#">
<span class="glyphicon glyphicon-trash"></span> Delete
</button>
</td>
</tr>
{% empty %}
<tr>
<td colspan="8" class="text-center bg-warning">No book</td>
</tr>
{% endfor %}
这就是我目前使用的所有文件。非常感谢任何帮助。我正在使用 Ajax 渲染到 CRUD 应用程序。由于上述消息,不会弹出模态表单。多个文件可能有错误。请纠正我。谢谢
解决方案
推荐阅读
- javascript - 在这种情况下,Firestore 会将 oldEmail 添加到集合中?
- mysql - MYSQL连接两个表慢
- python - 如何检查多个行条目是否具有指示变量
- javascript - 触发 Laravel Livewire 方法后,amChart 地图不显示
- r - 如何在`ggplot`中将下标放入轴标题
- javascript - 防止在 Mac 上的 Safari 中拖动滚动
- python - 从不同的链接抓取信息。问题:只保存第一个被抓取的链接的信息
- css - 努力在 React 上导航样式
- c# - 如何使用 JwtBearer 身份验证为服务创建客户端集成测试
- python - Python os.makedirs 调用“FileNotFound”错误