Не удается запросить атрибуты 'PublisherQuerySet' в Django - PullRequest
0 голосов
/ 18 октября 2018

В настоящее время я создаю веб-сайт в DjangoCMS и хочу запросить модель заголовка из cms и сравнить ее с request.path.Оттуда я буду загружать предварительно отфильтрованную версию активов.Все работает, пока я не сравню page_obj.title.Я возвращаю ошибку 'PublisherQuerySet' object has no attribute 'title', но я проверил модель, и у нее есть атрибут title.Есть ли определенный способ, которым мне нужно запросить этот PublisherQuerySet объект в отличие от обычного QuerySet, чтобы он тянул его назад?

в объекте obj.name непосредственно перед тем, как он работал нормально.Такое ощущение, что я упускаю что-то очевидное.

from django.shortcuts import render
from django.http import HttpResponse
from .models import *
import os
from cms.models import Title

def AssetListView(request, *args, **kwargs):
    path = os.path.basename(os.path.normpath(request.path))
    print(path)

    page_obj = Title.objects.filter(slug=path)[:1]
    print (page_obj)

    for obj in Tag.objects.all():
        print (obj.name)
        if obj.name == page_obj.title:
            return HttpResponse('<h1>test HTML<h1>')

1 Ответ

0 голосов
/ 18 октября 2018

Вы пишете:

page_obj = Title.objects.filter(slug=path)[:1]

это означает, что page_obj является не Title объектом, но QuerySet, который будет содержать ноль или более (здесь самое большееодин) Title элемент.Точно так же, как list из int egers не сам по себе int eger.

Возможно, вы захотите использовать здесь .first(), который вернет объект Title или None весли такого элемента не существует, например:

def AssetListView(request, *args, **kwargs):
    path = os.path.basename(os.path.normpath(request.path))
    print(path)

    page_obj = Title.objects.filter(slug=path)<b>.first()</b>
    print (page_obj)

    for obj in Tag.objects.all():
        print (obj.name)
        if obj.name == page_obj.title:
            return HttpResponse('test HTML')

Обратите внимание, что здесь вы можете вернуть что-то, если нет obj.name == page_obj.title.

Однако слаг часто является уникальным атрибут.Поэтому обычно .get(..) вместо .filter(..).first() является более предпочтительным способом, так как тогда мы, по крайней мере, знаем, что что-то не так.Таким образом, возможно, стоит выяснить, почему несколько записей имеют одинаковый слаг.

...