我正在尝试使用 slug url 访问页面,但我不断收到此错误 The QuerySet value for an exact lookup must be limited to one result using slicing.
我认为在我看来这将是 filter
或 get
错误,但我不知道错误来自哪里
视图.py
def tutorial_topic_category(request, slug):
tutorial_category = TutorialCategory.objects.get(slug=slug)
tutorial_topic_category = TutorialTopicCategory.objects.filter(tutorial_category=tutorial_category)
context = {
'tutorial_topic_category': tutorial_topic_category,
}
return render(request, 'tutorials/tutorial_topic_category.html', context)
def topic(request, slug, slug2):
tutorial_category = TutorialCategory.objects.get(slug=slug)
tutorial_topic_category = TutorialTopicCategory.objects.filter(tutorial_category=tutorial_category)
topic = Topic.objects.get(slug=slug2, tutorial_topic_category=tutorial_topic_category)
context = {
'topic': topic,
}
return render(request, 'tutorials/topic.html', context)
网址.py
path("<slug>", views.tutorial_topic_category, name='tutorial-topic-category'),
path("<slug>/<slug2>", views.topic, name='topic')
以及如何使用 django 模板标签在我的模板中传递 slug
<a href="{% url 'tutorials:topic' category.slug category.slug2 %}">
回答1
在您的主题视图中,您正在使用过滤器来获取教程主题类别。这将返回一个查询集而不是单个项目。然后,当您使用它来获取“主题”时,您是基于此集合而不是单个等价物进行查询,从而引发错误。所以,相反,只使用你可以说的过滤集中的第一个
topic = Topic.objects.get(slug=slug2, tutorial_topic_category=tutorial_topic_category[0])
...或者,如果你想使用全套,即使你只是在寻找一个项目
topic = Topic.objects.get(slug=slug2, tutorial_topic_category__in = tutorial_topic_category)
您可能还需要调整您的 URL,以便 slug2 来自主题 slug,因为这是用于定位例如的实例的模型:
<a href="{% url 'tutorials:topic' category.slug topic.slug2 %}">