如何使用 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)
我想对从查询集转换而来的列表进行排序。我试过使用 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)