python - 未找到带有参数 '('',)' 的 'add_review' 的反向操作。尝试了 1 种模式:['addreview/(?P[0-9]+)/$']
问题描述
我在 django 中添加评论模型后出现错误...在管理页面上创建模型但在我的网站上它不起作用。我不知道我哪里出错了...请指导我
在 base.html 的第 28 行出现错误
它还在views.py第21行显示错误
视图.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import *
from .forms import *
# Create your views here.
def home(request):
allbooks= book.objects.all()
context= {
"books": allbooks,
}
return render(request,'main/index.html',context) #error line
def detail (request,id):
bk=book.objects.filter(id=id)
reviews=Review.objects.filter(book=id)
context ={
"book":bk,
"reviews":reviews
}
return render (request,'main/details.html',context)
def addBooks(request):
if request.user.is_authenticated:
if request.user.is_superuser:
if request.method== "POST":
form=BookForm (request.POST or None)
if form.is_valid():
data=form.save(commit=False)
data.save()
return redirect("main:home")
else:
form=BookForm()
return render (request, 'main/addbooks.html',{"form":form,"controller":"Add Books"})
else:
return redirect("main:home")
else:
return redirect("accounts:login")
def editBooks(request,id):
if request.user.is_authenticated:
if request.user.is_superuser:
bk=book.objects.get(id=id)
if request.method== "POST":
form=BookForm (request.POST or None,instance=bk)
if form.is_valid():
data=form.save(commit=False)
data.save()
return redirect("main:detail",id)
else:
form=BookForm(instance=bk)
return render (request, 'main/addbooks.html',{"form":form,"controller":"Edit Books"})
else:
return redirect("main:home")
else:
return redirect("accounts:login")
def deleteBooks(request,id):
if request.user.is_authenticated:
if request.user.is_superuser:
bk=book.objects.get(id=id)
bk.delete()
return redirect("main:home")
else:
return redirect("main:home")
else:
return redirect("accounts:login")
def add_review(request,id):
if request.user.is_authenticated:
bk=book.objects.get(id=id)
if request.method == "POST":
form= ReviewForm(request.POST or None)
if form.is_valid():
data=form.save(commit=False)
data.comment=request.POST["comment"]
data.rating=request.POST["rating"]
data.user=request.user
data.book=bk
data.save()
return redirect("main:detail",id)
else:
form=ReviewForm()
return render(request,'main/details.html',{"form":form})
else:
return redirect("accounts:login")
base.html
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="{%url 'main:home'%}">Home<span class="sr-only">(current)</span></a> <!--error line-->
</li>
{% if request.user.is_authenticated %}
{% if request.user.is_superuser %}
<li class="nav-item">
<a class="nav-link" href="{% url 'main:add_books'%}">Add Books</a>
</li>
{% endif %}
{% endif %}
详细信息.html
<div class="card">
<div class="card-body">
<h3 class="text-center">Reviews</h3>
<form action="{%url 'main:add_review' book.id%}"method="POST">
{% csrf_token %}
<label for="comment">Review</label>
<textarea name="comment" id="comment" cols="30" rows="5" class="form-control"></textarea>
<label for="rating">Rating</label>
<input type="text" name="rating" class="form-control">
<br>
<input type="submit" class="btn btn-danger" value="Add Review">
</form>
</div>
</div>
<div class="card">
<div class="card-body">
<ul>
{% for review in reviews %}
<li>{{review.comment}} <i>{{review.user}}</i></li>
{% endfor %}
</ul>
</div>
</div>
模型.py
class Review(models.Model):
book=models.ForeignKey(book,on_delete=models.CASCADE)
user=models.ForeignKey(User,on_delete=models.CASCADE)
comment=models.TextField(max_length=10000)
rating=models.FloatField(default=0)
def __str__(self):
return self.user.username
解决方案
问题在这里:
def detail(request,id):
bk=book.objects.filter(id=id)
filter()
将返回书籍的查询集。您想获取实际的书,因此请get()
改用:
def detail(request,id):
bk=book.objects.get(id=id)
这应该可以解决错误,但是BookDoesNotExist
如果数据库中不存在具有该 id 的书,则会出现异常。你可以get_object_or_404
用来处理这个:
from django.shortcuts import get_object_or_404
def detail(request,id):
bk=get_object_or_404(book, id=id)
...
推荐阅读
- java - 在我的情况下如何进行搜索视图?安卓工作室
- c# - 如何将过滤后的数据从 DataGridView 显示到 StimulReport 中?
- sql - 有没有办法更新证书而无需更改 SQL Server 配置管理器中的证书(的指纹)?
- prolog - 执行所有子句并删除一些子句
- java - art::OatHeader::IsDebuggable() const 崩溃,Android 11,Google Ads SDK 19.7.0
- python - 遍历 CSV 时跳过 For 循环
- java - Docker Image 和 Java HTTP Post 请求
- python-3.x - 熊猫计算重复条目
- python - pygame.key.get_pressed() 和 event.type 有什么区别?
- javascript - 未捕获的 TypeError:timer.getTime 不是更新时的函数