我已经用 $result = json_decode($temp,true);
echo $result['result']['items'][0]['woj'];
对Recommendations
进行了排序,并获得了ID,然后当我对其进行过滤以获取rating_prediction
时,排序就不再相同了
Tracks
型号:
class RecommendationView(generics.ListAPIView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
serializer_class = RecommendedTrackSerializer
queryset = Recommendations.objects.all()
pagination_class = api_settings.DEFAULT_PAGINATION_CLASS
def get_queryset(self):
recommendation = Recommendations.objects.filter(user=self.request.user)
sorted_recommendation = recommendation.order_by('-rating_prediction')
ids = list(sorted_recommendation.values_list('track', flat=True))
tracks = Track.objects.filter(id__in=ids)
return tracks
答案 0 :(得分:1)
您的过滤方式如下:
tracks = Track.objects.filter(id__in=ids)
但这不是 并不意味着Track
的顺序与ids
相同。您只需进行过滤,然后根据数据库对此进行索引的方式,通常它将按id
或其他某种度量标准生成列表顺序(例如,如果您将默认顺序附加到Track
模型)。这也可能取决于数据库引擎。由于您从未声明过订单,因此数据库具有“自由度”来选择任何订单。
但是,您可以减少查询量,并编写如下:
def get_queryset(self):
return Track.objects.filter(
recommendations__user=self.request.user
).order_by('-recommendations__rating_prediction')
如果用户每首曲目只能给出一个推荐,则不会产生任何重复。如果用户可以为某个曲目提供多个建议,则应添加.distinct()
调用。
因此,我们获得了给定用户推荐的Track
,并根据用户推荐的方式对它们进行排序,所有这些都在一个查询中。
答案 1 :(得分:1)
Track.objects.filter(recommendation__user=self.request.user).order_by('-recommendation__rating_prediction')