【问题标题】:ordering items in a list but keep getting AttributeError订购列表中的项目,但不断收到 AttributeError
【发布时间】:2021-03-02 02:08:19
【问题描述】:

我正在尝试按“已创建”的降序排列此列表中我创建的所有帖子。

这是我的功能:

def posts_search_by_following(request, user_username):
    start = int(request.GET.get('start') or 0)
    end = int(request.GET.get('end') or (start + 9))

    profile = get_object_or_404(User, username=user_username)
    following_users = profile.get_following()
    posts = list()[start:end]
    for person in following_users:
        posts += Post.objects.filter(creator=person).order_by('-created')


    return JsonResponse(
        {'posts': [post.serialize() for post in posts]}
    )

就像现在一样,它只是按每个人的“创建”字段排序帖子。因此,当返回整个列表时,并非一切都井井有条。但是,如果我尝试将 .order_by('created') 移动到其他任何地方:

{'posts': [post.serialize() for post in posts].order_by('created')}

它会给我一个像这样的属性错误:

AttributeError at /posts/Moderator/following/search
'list' object has no attribute 'order_by'

我怎样才能得到帖子的总数,然后对它们进行相应的排序?

【问题讨论】:

  • .sort() 确实看起来正是我所需要的,但是当我尝试像这样使用它时:return JsonResponse( {'posts': [post.serialize() for post in posts.sort()]} ) 我收到这样的类型错误'<' not supported between instances of 'Post' and 'Post'

标签: python django list django-views attributeerror


【解决方案1】:

这不起作用的原因是因为您的posts 是一个列表,而不是QuerySet,并且列表没有.order_by(…) [Django-doc] 方法。一次查询即可查询所有人的Posts:

def posts_search_by_following(request, user_username):
    start = int(request.GET.get('start') or 0)
    end = int(request.GET.get('end') or (start + 9))

    profile = get_object_or_404(User, username=user_username)
    following_users = profile.get_following()
    posts = Post.objects.filter(
        creator__in=following_users
    ).order_by('-created')[start:end]


    return JsonResponse(
        {'posts': [post.serialize() for post in posts]}
    )

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2018-12-03
    • 2016-09-19
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多