首页 > 解决方案 > 订购列表中的项目,但不断收到 AttributeError

问题描述

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

这是我的功能:

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'

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

标签: pythondjangolistdjango-viewsattributeerror

解决方案


这不起作用的原因是因为您posts是一个list,而不是 a QuerySet,并且一个 list 没有.order_by(…)[Django-doc]方法。您可以Post使用单个查询查询所有人员的所有 s:

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]}
    )

推荐阅读