python - Django:用于精确查找的 QuerySet value 必须使用切片限制为一个结果

我正在尝试使用 slug url 访问页面,但我不断收到此错误 The QuerySet value for an exact lookup must be limited to one result using slicing. 我认为在我看来这将是 filterget 错误,但我不知道错误来自哪里

视图.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  %}">

相似文章

随机推荐

最新文章