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
Вернуться на верх