Django: значение QuerySet для точного поиска должно быть ограничено одним результатом с использованием нарезки

я пытаюсь получить доступ к странице, используя 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')

и как мне передать слаг в моем шаблоне, используя тег шаблона django

<a href = "{% url 'tutorials:topic' category.slug category.slug2  %}">

В какой строке ошибка?

Naufal Hilmiaji 14.05.2022 12:41

слаг может обрабатываться по-разному, когда вы делаете с ним get... можете ли вы попробовать указать тип в URL как path("<slug:slug>", views.tutorial_topic_category, name='tutorial-topic-category'), path("<slug:slug>/<slug:slug2>", views.topic, name='topic')

Vivek Anand 14.05.2022 12:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 исходил из слага темы, поскольку это модель, которая будет использоваться для поиска экземпляра, например:

<a href = "{% url 'tutorials:topic' category.slug topic.slug2  %}">

теперь он показывает эту ошибку Topic matching query does not exist.

Destiny Franks 14.05.2022 13:49

Это говорит о том, что ничто не соответствует вашим критериям для Topic.objects.get(...). Я обновил ответ, указав еще одно соображение о создании вашего URL.

SamSparx 14.05.2022 14:54

Другие вопросы по теме