【发布时间】:2018-02-26 21:15:38
【问题描述】:
我正在尝试按类别列出一组交易
我有一个交易模型和一个类别模型,其中类别是交易的外键,如下所示:
class Deal(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=140, unique=True)
description = models.TextField(default='')
category = models.ForeignKey(Category)
类别页面的 urlpattern 如下所示:
url(r'^category/(?P<category>\w+)/$', deals_by_category, name='category')
其他网址如下所示:
url(r'^all/$', DealListView.as_view(), name='deals'),
url(r'^(?P<slug>.*)/$', deal_by_detail, name='deal_detail'),
url(r'^category/(?P<category>\w+)/$', deals_by_category, name='category'),
url(r'^home/$', DealHome.as_view(), name='deal_home'),
url(r'^test/$', Home.as_view(), name='deal_test'),
url(r'^(?P<pk>[0-9]+)/like', like, name='like'),
这个 urlpattern 的视图是这样的:
def deals_by_category(request,category):
category_deals = Deal.objects.filter(category__name=category,
)
return render(request, 'deals/category.html', {'category_deals': category_deals})
我的其他视图如下所示:
class DealListView(generic.ListView):
model = Deal
context_object_name = 'deal_list'
queryset = Deal.objects.all()
template_name = 'deal_list.html'
class DealHome(generic.TemplateView):
model = Deal
template_name = 'deals/test.html
def deal_by_detail(request, slug):
deal_detail = Deal.objects.get(slug=slug)
return render(request, 'deals/deal_detail.html', {'deal_detail': deal_detail})
def like(request, pk):
if request.method == 'POST':
deal = Deal.objects.get(pk=pk)
deal.likes_total += 1
deal.save()
return redirect('home')
然后我的 category.html 模板会像这样循环遍历这些返回的交易:
{% for deal in category_deals %}
<h5 class="card-retailer">{{ deal.retailer}}</h5>
<p class="card-title">{{ deal.title }}</p>
现在如果我点击这样的预定类别链接就会出现问题:
http://localhost:8000/deals/category/Apparel/
但错误不是指向我的“deals_by_category”视图,而是指向每个交易的单个视图 --- 堆栈跟踪指向下面的第二行。我认为这一定很容易解决,但过去几个小时一直盯着这个问题,无法确定问题所在。
def deal_by_detail(request, slug):
deal_detail = Deal.objects.get(slug=slug)
return render(request, 'deals/deal_detail.html', {'deal_detail': deal_detail})
注意这里是完整的错误和回溯:
DoesNotExist at /deals/category/Apparel/
Deal matching query does not exist.
Request Method: GET
Request URL: http://localhost:8000/deals/category/Apparel/
追溯:
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\crstu\Desktop\JSPROJ\dealmazing\deals\views.py" in deal_by_detail
22. deal_detail = Deal.objects.get(slug=slug)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\manager.py" in manager_method
122. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\crstu\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\db\models\query.py" in get
387. self.model._meta.object_name
Exception Type: DoesNotExist at /deals/category/Apparel/
Exception Value: Deal matching query does not exist.
【问题讨论】:
-
如果您对错误有任何疑问,您需要发布该错误和完整的回溯。
-
抱歉---刚刚发布了
-
你的问题还不清楚。该 URL 由
deal_by_detail视图提供,而不是deals_by_category。如果这不是您所期望的,您需要发布整个 urls.py。 -
不——我实际上希望在有人访问此链接时提供“deals_by_category”视图:“localhost:8000/deals/category/Apparel”我现在正在发布完整的网址和视图......一秒钟