我目前正在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>')
答案 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(..)
是更可取的方式,因为这样我们至少知道什么时候出了问题。因此,可能有必要研究为什么多个记录具有相同的特征。