Django queryset values\u list是否返回列表对象?
我有一个Django应用程序,用户在其中发布照片,其他人在照片下留言 当留下评论时,我需要通知:Django queryset values\u list是否返回列表对象?,django,django-models,django-orm,Django,Django Models,Django Orm,我有一个Django应用程序,用户在其中发布照片,其他人在照片下留言 当留下评论时,我需要通知: 其他写这篇文章的人 照片的所有者,以防照片未包含在(1)中 就第(1)项而言,我认为: 接下来,对于(2),我尝试: 我最后犯了一个错误: “ValuesListQuerySet”对象没有属性“append” 我觉得这很奇怪,因为我正在提取一个值列表 这不是一个列表对象吗?在这种情况下,属性append不应该在这种情况下工作吗?请解释错误并提出替代方案。值列表方法返回一个ValuesListQuer
这不是一个列表对象吗?在这种情况下,属性
append
不应该在这种情况下工作吗?请解释错误并提出替代方案。值列表方法返回一个ValuesListQuerySet
。这意味着它具有queryset的优点。例如,它是惰性的,所以在对数据库进行切片时,只从数据库中获取前25个元素
要将其转换为列表,请使用list()
您可能可以从用户
模型启动查询集,而不是使用值列表
。您尚未显示您的模型,因此以下代码只是猜测:
from django.db.models import Q
commenters = User.objects.filter(Q(id=which_photo.owner_id)|Q(photocomment=which_photo))
嗯,当我在应用您的修复后发布第一条评论时,我在
all\u relevant\u id=list(set(all\u relevant\u id))
行上得到'NoneType'对象不可编辑。我需要对此进行更深入的研究。请注意,append
方法返回None
。您只需要所有注释者id.append(which\u photo.owner\u id)
-不要将结果分配给所有相关的id
。另外,我是否应该将我正在获取的值列表片段也包含在set
中,因为有些id可能会重复?Re:用户对象路由,光通信不是用户的一部分,因此不能这样做。不过还是谢谢你的建议。你是否切取决于你自己。由于您正在对结果调用set()
,因此最终列表中的条目可能少于25个。如果您需要25个项目,那么您可能需要转换为一个集合,然后返回到一个列表,然后切片。但是,这将从数据库中获取所有ID,这可能会很慢。我不确定如何使用ORM获得前25个唯一ID。对我来说,这似乎是一个命名不好的方法,难怪会有这么多混乱。
all_relevant_ids = all_commenter_ids.append(which_photo.owner_id)
all_relevant_ids = list(set(all_relevant_ids))
all_commenter_ids = PhotoComment.objects.filter(which_photo=which_photo).order_by('-id').values_list('submitted_by', flat=True)[:25]
all_commenter_ids = list(all_commenter_ids)
from django.db.models import Q
commenters = User.objects.filter(Q(id=which_photo.owner_id)|Q(photocomment=which_photo))