【发布时间】:2020-10-20 17:48:07
【问题描述】:
我正在尝试根据两个用户之间最后一条消息的时间戳来排序用户配置文件。
我正在使用 SerializerMethodField 来获取最后一条消息的时间戳。
有什么方法可以对数据进行排序吗?
class UserProfileSerializer(serializers.ModelSerializer):
lastmessage = serializers.SerializerMethodField()
class Meta:
model = User
fields = ['id','lastmessage']
def get_lastmessage(self,obj):
k = self.context.get('view').kwargs['sid']
data =( Message.objects.filter(receiver=obj.id,sender=k) | Message.objects.filter(sender=obj.id,receiver=k)).order_by('-timestamp').values('message','timestamp')
if len(data) == 0:
return ""
else:
data = data.first()
data["timestamp"] = str(data["timestamp"])
return str(data)
我的看法:
class UserChatViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserProfileSerializer
现在我的观点回归了:
[{
"id": 4,
"lastmessage": "{'message': 'random', 'timestamp': '2020-06-14 23:49:33.077749+00:00'}"
},
{
"id": 5,
"lastmessage": ""
},
{
"id": 6,
"lastmessage": "{'message': 'sample', 'timestamp': '2020-06-14 11:53:03.880833+00:00'}"
},
{
"id": 7,
"lastmessage": ""
}]
但我希望它根据最后一条消息的时间戳进行排序
【问题讨论】:
-
你能发表你的看法吗?get_queryset 方法
-
class UserChatViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserProfileSerializer
标签: django django-rest-framework django-views django-serializer django-jsonfield