Django: Значение QuerySet для точного поиска должно быть ограничено одним результатом с помощью нарезки
я пытаюсь получить доступ к странице, используя slug url, но я продолжаю получать эту ошибку The QuerySet value for an exact lookup must be limited to one result using slicing. я думал, что это будет ошибка filter или get в моем представлении, но я не знаю, откуда исходит ошибка
view.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)
urls.py
path("<slug>", views.tutorial_topic_category, name='tutorial-topic-category'),
path("<slug>/<slug2>", views.topic, name='topic')
и как мне передать slug в моем шаблоне, используя тег шаблона django
<a href="{% url 'tutorials:topic' category.slug category.slug2 %}">
В представлении темы вы используете фильтр для получения категории темы учебника. Это возвращает набор запросов, а не один элемент. Когда вы затем используете его для получения 'topic', вы делаете запрос на основе этого набора, а не одного эквивалента, что вызывает ошибку. Поэтому вместо этого, чтобы использовать только первый из отфильтрованного набора, можно сказать
tutorial_topic_category=tutorial_topic_category[0]
...или, если вы хотите использовать полный набор, хотя вам нужен только один элемент
tutorial_topic_category__in = tutorial_topic_category