如何使用 Django 从查询集中对列表进行排序

How to sort a list from queryset using Django

我想对从查询集转换而来的列表进行排序。我试过使用 sorted,但出现错误

这是我的代码:

views.py

@api_view(['GET'])
def practiceAnswer_filter(request):
    # GET list of filtered practiceAnswer
    if request.method == 'GET':
        practiceAnswers = PracticeAnswer.objects.all()
        
    practice_id = request.GET.get('practice_id', None)
    if practice_id is not None:
        # filter practiceAnswer based on practice_id
        practiceAnswer_filtered = practiceAnswers.filter(practice_id__practice_id__icontains=practice_id)
        # convert queryset to list
        practiceAnswer_list = list(practiceAnswer_filtered)
        # shuffle to get random practiceAnswer
        shuffle(practiceAnswer_list)
        # splice list to limit practiceAnswer
        practiceAnswer_shuffled = practiceAnswer_list[:3]
        
        practiceAnswer_sort = practiceAnswer_shuffled
        dict(sorted(practiceAnswer_sort.items(), key=lambda item: item[1]))
        print(practiceAnswer_sort)
        
        practiceAnswers_serializer = PracticeAnswerSerializer(practiceAnswer_sort, many=True)
        return JsonResponse(practiceAnswers_serializer.data, safe=False)

这是查询集的原始数据:

<QuerySet [<PracticeAnswer: 1>, <PracticeAnswer: 2>, <PracticeAnswer: 3>]>

这是从查询集到列表的转换数据:

[<PracticeAnswer: 1>, <PracticeAnswer: 2>, <PracticeAnswer: 3>]

实际上,对于原始数据和转换后的数据,我已经得到了排序后的数据,但是我仍然通过基于 practice_id 过滤原始数据来处理它,并在限制之后随机化数据以获得随机数据 /拼接只显示3个数据。没有 sorted 出现的 3 个数据不是顺序的,我希望数据按值 1、2、3

排序

如果我运行上面的代码,我得到一个错误:

AttributeError at /api/practice-answer-filter
'list' object has no attribute 'items'

如何解决? 我不知道该怎么做。 请帮我。 谢谢。

我想你可以这样使用 .sort:

def sort_list(e):
    return e.pk


practiceAnswer_shuffled.sort(key=sort_list)

More info about sort