Python 如何解决;“无反向匹配”;和Django
我试图做的是允许用户单击产品,进入产品页面,然后能够向该产品页面添加评论。用户添加评论时,评论会附加到产品中。我不确定这是否是最好的使用方法 在编辑表单后的最后几天里,我一直遇到这个错误的问题。如果您有任何解决方案,请告诉我 谢谢大家! 型号.pyPython 如何解决;“无反向匹配”;和Django,python,html,django,web,Python,Html,Django,Web,我试图做的是允许用户单击产品,进入产品页面,然后能够向该产品页面添加评论。用户添加评论时,评论会附加到产品中。我不确定这是否是最好的使用方法 在编辑表单后的最后几天里,我一直遇到这个错误的问题。如果您有任何解决方案,请告诉我 谢谢大家! 型号.py class Beach(models.Model): name = models.CharField(max_length=80) location = models.CharField(max_length=200)
class Beach(models.Model):
name = models.CharField(max_length=80)
location = models.CharField(max_length=200)
video = models.FileField(upload_to='beachvideo', blank=True)
beachPic = models.ImageField(default='default.jpg', upload_to='beachphotos', blank=True)
datetimeInfo = models.DateTimeField(auto_now=True)
lat = models.FloatField()
lon = models.FloatField()
info = models.TextField()
def average_rating(self):
all_ratings = map(lambda x: x.rating, self.review_set.all())
return np.mean(all_ratings)
def __str__(self):
return f'{self.name}'
class Review(models.Model):
RATING = (
('1', 'Avoid'),
('2', 'Not Great'),
('3', 'Decent'),
('4', 'Awesome'),
('5', 'The Best'),
)
beach = models.ForeignKey(Beach, on_delete= models.CASCADE)
author = models.ForeignKey(User, null=True, blank=True, on_delete= models.CASCADE)
ratingRank = models.CharField(max_length= 100, blank=False, choices=RATING)
waveIntensityRank = models.CharField(max_length= 100, blank=True, choices=RATING)
crowdednessRank = models.CharField(max_length= 100, blank=True, choices=RATING)
pollutionRank = models.CharField(max_length= 100, blank=True, choices=RATING)
noiseLevelRank = models.CharField(max_length= 100, blank=True, choices=RATING)
servicesRank = models.CharField(max_length= 100, blank=True, choices=RATING)
comments = models.TextField(max_length=250, blank=True)
pub_date = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse('beaches-home')
def __str__(self):
return self.author.username
def beachView(request):
beachView = {
'beachView': Beach.objects.all()
}
return render(request, 'beaches/index.html', context = beachView)
def beachDescription(request, pk):
beachDesc = {
'beachDesc': Beach.objects.get(pk=pk)
}
return render(request, 'beaches/description.html', context = {'beachDesc': beachDesc} )
def review_list(request):
latest_reviews = Review.objects.order_by('-pub_date')[:9]
def add_review(request, beach_id):
beachRev = get_object_or_404(Beach, pk=beach_id)
review_form = ReviewForm(request.POST)
if review_form.is_valid():
rating = review_form.cleaned_data['rating']
comment = review_form.cleaned_data['comments']
user_name = review_form.cleaned_data['author']
wave_intensity = review_form.cleaned_data['waveIntensityRank']
crowds = review_form.cleaned_data['crowdednessRank']
pollution = review_form.cleaned_data['pollutionRank']
noise_level = review_form.cleaned_data['noiseLevelRank']
services = review_form.cleaned_data['servicesRank']
review = Review()
review.beach = beachRev
review.author = user_name
review.rating = rating
review.waveIntensityRank = wave_intensity
review.crowdednessRank = crowds
review.pollutionRank = pollution
review.noiseLevelRank = noise_level
review.servicesRank = services
review.comments = comment
review.pub_date = datetime.datetime.now()
review.save()
return HttpResponseRedirect(reverse('beaches/description.html', args=(beach_id,)))
#if request.method == "POST":
#review_form = review_form(data=request.POST)
#if review_form.is_valid():
# rating = review_form.cleaned_data
# post.date = timezone.now()
# post.save()
# return redirect('beaches/beachReview.html')
#else:
# form=ReviewForm()
return render(request, 'beaches/beachReview.html', context= {'beachRev': beachRev, 'review_form': review_form})
class searchResultsView(ListView):
model = Beach
template_name = 'beaches/searchResults.html'
def get_queryset(self): # new
query = self.request.GET.get('q')
object_list = Beach.objects.filter(
Q(name__icontains=query) | Q(location__icontains=query)
)
return object_list
urlpatterns = [
path('', views.beachView, name='beaches-home'),
path('<int:pk>/', views.beachDescription, name='beaches-description'),
path('search/', views.searchResultsView.as_view(), name='search-results'),
path('review/<int:pk>', views.add_review, name='beaches-review')
]
视图.py
class Beach(models.Model):
name = models.CharField(max_length=80)
location = models.CharField(max_length=200)
video = models.FileField(upload_to='beachvideo', blank=True)
beachPic = models.ImageField(default='default.jpg', upload_to='beachphotos', blank=True)
datetimeInfo = models.DateTimeField(auto_now=True)
lat = models.FloatField()
lon = models.FloatField()
info = models.TextField()
def average_rating(self):
all_ratings = map(lambda x: x.rating, self.review_set.all())
return np.mean(all_ratings)
def __str__(self):
return f'{self.name}'
class Review(models.Model):
RATING = (
('1', 'Avoid'),
('2', 'Not Great'),
('3', 'Decent'),
('4', 'Awesome'),
('5', 'The Best'),
)
beach = models.ForeignKey(Beach, on_delete= models.CASCADE)
author = models.ForeignKey(User, null=True, blank=True, on_delete= models.CASCADE)
ratingRank = models.CharField(max_length= 100, blank=False, choices=RATING)
waveIntensityRank = models.CharField(max_length= 100, blank=True, choices=RATING)
crowdednessRank = models.CharField(max_length= 100, blank=True, choices=RATING)
pollutionRank = models.CharField(max_length= 100, blank=True, choices=RATING)
noiseLevelRank = models.CharField(max_length= 100, blank=True, choices=RATING)
servicesRank = models.CharField(max_length= 100, blank=True, choices=RATING)
comments = models.TextField(max_length=250, blank=True)
pub_date = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse('beaches-home')
def __str__(self):
return self.author.username
def beachView(request):
beachView = {
'beachView': Beach.objects.all()
}
return render(request, 'beaches/index.html', context = beachView)
def beachDescription(request, pk):
beachDesc = {
'beachDesc': Beach.objects.get(pk=pk)
}
return render(request, 'beaches/description.html', context = {'beachDesc': beachDesc} )
def review_list(request):
latest_reviews = Review.objects.order_by('-pub_date')[:9]
def add_review(request, beach_id):
beachRev = get_object_or_404(Beach, pk=beach_id)
review_form = ReviewForm(request.POST)
if review_form.is_valid():
rating = review_form.cleaned_data['rating']
comment = review_form.cleaned_data['comments']
user_name = review_form.cleaned_data['author']
wave_intensity = review_form.cleaned_data['waveIntensityRank']
crowds = review_form.cleaned_data['crowdednessRank']
pollution = review_form.cleaned_data['pollutionRank']
noise_level = review_form.cleaned_data['noiseLevelRank']
services = review_form.cleaned_data['servicesRank']
review = Review()
review.beach = beachRev
review.author = user_name
review.rating = rating
review.waveIntensityRank = wave_intensity
review.crowdednessRank = crowds
review.pollutionRank = pollution
review.noiseLevelRank = noise_level
review.servicesRank = services
review.comments = comment
review.pub_date = datetime.datetime.now()
review.save()
return HttpResponseRedirect(reverse('beaches/description.html', args=(beach_id,)))
#if request.method == "POST":
#review_form = review_form(data=request.POST)
#if review_form.is_valid():
# rating = review_form.cleaned_data
# post.date = timezone.now()
# post.save()
# return redirect('beaches/beachReview.html')
#else:
# form=ReviewForm()
return render(request, 'beaches/beachReview.html', context= {'beachRev': beachRev, 'review_form': review_form})
class searchResultsView(ListView):
model = Beach
template_name = 'beaches/searchResults.html'
def get_queryset(self): # new
query = self.request.GET.get('q')
object_list = Beach.objects.filter(
Q(name__icontains=query) | Q(location__icontains=query)
)
return object_list
urlpatterns = [
path('', views.beachView, name='beaches-home'),
path('<int:pk>/', views.beachDescription, name='beaches-description'),
path('search/', views.searchResultsView.as_view(), name='search-results'),
path('review/<int:pk>', views.add_review, name='beaches-review')
]
HTML
{% extends 'base.html' %}
{% load static %}
{% block content %}
<head>
<link rel="stylesheet" href="{% static 'css/bestbeach.css' %}">
</head>
<h1> {{ beachDesc.name }} </h1>
<h4> Location: {{ beachDesc.location }} </h4>
<h4> Rating: {{ beachDesc.ratingRank }} </h4>
<table>
<tr>
<td> <img src="{{ beachDesc.beachPic.url }}" width="350px" height="200px"/> </td>
</tr>
<tr>
<td> <video width="350px" height="200px" loop="loop" preload="auto" controls>
<source src="{{ beachDesc.video.url }}" type="video/mp4">
Your browser does not support the video.
</video>
</td>
</tr>
</table>
<h4> Information: {{ beachDesc.info }} </h4>
{% if user.is_authenticated %}
<a href="{% url 'beaches-review' %}">
<button class="goButton" type="submit">Leave a Review</button>
</a>
{% endif %}
{% if review_list %}
<div>
{% for r in review_list %}
<div>
<h4> Reviews: </h4>
<p> {{ r.author }} </p>
<h6> rated {{ r.rating }} of 5 </h6>
<p>{{ r.comments }}</p>
</div>
{% endfor %}
</div>
{% else %}
<p>No reviews are available.</p>
{% endif %}
{% endblock %}
{%extends'base.html%}
{%load static%}
{%block content%}
{{beachDesc.name}
位置:{{beachDesc.Location}
评级:{{beachDesc.ratingRank}
您的浏览器不支持该视频。
信息:{{beachDesc.info}
{%if user.u经过身份验证%}
{%endif%}
{%if review_list%}
{审查中的r的%u列表%}
审查:
{{r.author}}
额定值{r.rating}}为5
{{r.comments}}
{%endfor%}
{%else%}
没有可用的评论
{%endif%}
{%endblock%}
url.py
class Beach(models.Model):
name = models.CharField(max_length=80)
location = models.CharField(max_length=200)
video = models.FileField(upload_to='beachvideo', blank=True)
beachPic = models.ImageField(default='default.jpg', upload_to='beachphotos', blank=True)
datetimeInfo = models.DateTimeField(auto_now=True)
lat = models.FloatField()
lon = models.FloatField()
info = models.TextField()
def average_rating(self):
all_ratings = map(lambda x: x.rating, self.review_set.all())
return np.mean(all_ratings)
def __str__(self):
return f'{self.name}'
class Review(models.Model):
RATING = (
('1', 'Avoid'),
('2', 'Not Great'),
('3', 'Decent'),
('4', 'Awesome'),
('5', 'The Best'),
)
beach = models.ForeignKey(Beach, on_delete= models.CASCADE)
author = models.ForeignKey(User, null=True, blank=True, on_delete= models.CASCADE)
ratingRank = models.CharField(max_length= 100, blank=False, choices=RATING)
waveIntensityRank = models.CharField(max_length= 100, blank=True, choices=RATING)
crowdednessRank = models.CharField(max_length= 100, blank=True, choices=RATING)
pollutionRank = models.CharField(max_length= 100, blank=True, choices=RATING)
noiseLevelRank = models.CharField(max_length= 100, blank=True, choices=RATING)
servicesRank = models.CharField(max_length= 100, blank=True, choices=RATING)
comments = models.TextField(max_length=250, blank=True)
pub_date = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse('beaches-home')
def __str__(self):
return self.author.username
def beachView(request):
beachView = {
'beachView': Beach.objects.all()
}
return render(request, 'beaches/index.html', context = beachView)
def beachDescription(request, pk):
beachDesc = {
'beachDesc': Beach.objects.get(pk=pk)
}
return render(request, 'beaches/description.html', context = {'beachDesc': beachDesc} )
def review_list(request):
latest_reviews = Review.objects.order_by('-pub_date')[:9]
def add_review(request, beach_id):
beachRev = get_object_or_404(Beach, pk=beach_id)
review_form = ReviewForm(request.POST)
if review_form.is_valid():
rating = review_form.cleaned_data['rating']
comment = review_form.cleaned_data['comments']
user_name = review_form.cleaned_data['author']
wave_intensity = review_form.cleaned_data['waveIntensityRank']
crowds = review_form.cleaned_data['crowdednessRank']
pollution = review_form.cleaned_data['pollutionRank']
noise_level = review_form.cleaned_data['noiseLevelRank']
services = review_form.cleaned_data['servicesRank']
review = Review()
review.beach = beachRev
review.author = user_name
review.rating = rating
review.waveIntensityRank = wave_intensity
review.crowdednessRank = crowds
review.pollutionRank = pollution
review.noiseLevelRank = noise_level
review.servicesRank = services
review.comments = comment
review.pub_date = datetime.datetime.now()
review.save()
return HttpResponseRedirect(reverse('beaches/description.html', args=(beach_id,)))
#if request.method == "POST":
#review_form = review_form(data=request.POST)
#if review_form.is_valid():
# rating = review_form.cleaned_data
# post.date = timezone.now()
# post.save()
# return redirect('beaches/beachReview.html')
#else:
# form=ReviewForm()
return render(request, 'beaches/beachReview.html', context= {'beachRev': beachRev, 'review_form': review_form})
class searchResultsView(ListView):
model = Beach
template_name = 'beaches/searchResults.html'
def get_queryset(self): # new
query = self.request.GET.get('q')
object_list = Beach.objects.filter(
Q(name__icontains=query) | Q(location__icontains=query)
)
return object_list
urlpatterns = [
path('', views.beachView, name='beaches-home'),
path('<int:pk>/', views.beachDescription, name='beaches-description'),
path('search/', views.searchResultsView.as_view(), name='search-results'),
path('review/<int:pk>', views.add_review, name='beaches-review')
]
urlpatterns=[
路径(“”,views.beachView,name='beats-home'),
路径(“/”,views.beachDescription,name='beats-description'),
路径('search/',views.searchResultsView.as_view(),name='search-results'),
路径('review/',views.add_review,name='beats-review')
]
谢谢你的帮助 看起来您正在尝试使用模板而不是路由名称生成url:
return HttpResponseRedirect(reverse('beaches/description.html', ...))
相反,您希望:
return HttpResponseRedirect(reverse("beaches-description", ...))
看起来您正在尝试使用模板而不是路由名称生成url:
return HttpResponseRedirect(reverse('beaches/description.html', ...))
相反,您希望:
return HttpResponseRedirect(reverse("beaches-description", ...))
请包括您的stacktrace@schillingt。对不起,条款上有点生疏。什么是stacktrace?请包括您的stacktrace。@schillingt。对不起,条款上有点生疏。什么是stacktrace?感谢您的回复!我会尝试一下,看看它是否管用。这很管用,但现在我从“海滩评论”中得到了一个与之不匹配的反面。谢谢你的回复!我会试试看它是否有效。这很有效,但现在我从《海滩评论》中得到了一个与之相反的答案