无法在Django中查询“ PublisherQuerySet”属性

时间:2018-10-18 19:54:42

标签: django django-models django-queryset

我目前正在DjangoCMS中建立一个网站,我想从cms查询Title模型并将其与request.path进行比较。从那里,我将加载资产的预过滤版本。一切正常,直到我比较page_obj.title。我返回了错误'PublisherQuerySet' object has no attribute '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 :(得分:2)

您写:

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

这意味着page_obj不是 Title对象,而是QuerySet,它将包含零个或多个(此处最多为一个){{1 }}元素。就像Title个元素中的list本身并不是int个元素。

您可能想在此处使用int,它将返回一个.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).first() print (page_obj) for obj in Tag.objects.all(): print (obj.name) if obj.name == page_obj.title: return HttpResponse('test HTML')不成立。

但是,

一个子弹通常是 unique 属性。因此通常用obj.name == page_obj.title代替.get(..)是更可取的方式,因为这样我们至少知道什么时候出了问题。因此,可能有必要研究为什么多个记录具有相同的特征。