Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django queryset values\u list是否返回列表对象?_Django_Django Models_Django Orm - Fatal编程技术网

Django queryset values\u list是否返回列表对象?

Django queryset values\u list是否返回列表对象?,django,django-models,django-orm,Django,Django Models,Django Orm,我有一个Django应用程序,用户在其中发布照片,其他人在照片下留言 当留下评论时,我需要通知: 其他写这篇文章的人 照片的所有者,以防照片未包含在(1)中 就第(1)项而言,我认为: 接下来,对于(2),我尝试: 我最后犯了一个错误: “ValuesListQuerySet”对象没有属性“append” 我觉得这很奇怪,因为我正在提取一个值列表 这不是一个列表对象吗?在这种情况下,属性append不应该在这种情况下工作吗?请解释错误并提出替代方案。值列表方法返回一个ValuesListQuer

我有一个Django应用程序,用户在其中发布照片,其他人在照片下留言

当留下评论时,我需要通知:

  • 其他写这篇文章的人
  • 照片的所有者,以防照片未包含在(1)中
  • 就第(1)项而言,我认为:

    接下来,对于(2),我尝试:

    我最后犯了一个错误:

    “ValuesListQuerySet”对象没有属性“append”

    我觉得这很奇怪,因为我正在提取一个值列表


    这不是一个列表对象吗?在这种情况下,属性
    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))