【问题标题】:Get user's last message django-postman & Rest API获取用户的最后一条消息 django-postman 和 Rest API
【发布时间】:2021-05-18 05:24:38
【问题描述】:

我已经安装了 Django-Postman 用户到用户消息包。我正在尝试使用 Rest API 获取用户的最后一条消息。

你可以在这里查看 django-postman 包:https://pypi.org/project/django-postman/

models.py 的一部分

class Message(models.Model):
    """
    A message between a User and another User or an AnonymousUser.
    """

    SUBJECT_MAX_LENGTH = 120

    subject = models.CharField(_("subject"), max_length=SUBJECT_MAX_LENGTH)
    body = models.TextField(_("body"), blank=True)
    sender = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='sent_messages',
        null=True, blank=True, verbose_name=_("sender"))
    recipient = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='received_messages',
        null=True, blank=True, verbose_name=_("recipient"))
    sent_at = models.DateTimeField(_("sent at"), default=now)
    objects = MessageManager()

Views.py

class InboxLastMessagesViewSet(viewsets.ModelViewSet):
    serializer_class = InboxLastMessagesSerializer
    authentication_classes = (JSONWebTokenAuthentication,)
    permission_classes = (IsAuthenticated,)

    def get_queryset(self):
        user = self.request.user
        return Message.objects.filter(Q(sender=user) | Q(recipient=user)).order_by('sender')

Serializers.py

class InboxLastMessagesSerializer(serializers.ModelSerializer):
    senderusername = serializers.CharField(source='sender.username', read_only=True)
    reciusername = serializers.CharField(source='recipient.username', read_only=True)
    sonmesaj = serializers.SerializerMethodField()

    def get_lastmessage(self, obj):

           /// I'M TRYING TO CREATE A FUNCTION ON HERE FOR GET SENDER'S LAST MESSAGE ////
        lastmsg = obj.latest('sent_at')
        return dict(body=lastmsg)


    class Meta:
        model = Message
        fields = ('senderusername', 'reciusername', 'body', 'sent_at', 'lastmessage')

我想要这样的输出:

{
        "senderusername": "user",
        "reciusername": "user2",
        "body": "Actually that is not last message",
        "sent_at": "2019-01-19T23:08:54Z",
        "lastmessage": {
            "body": "That's conversation's last message!"
        }
    },
 {
        "senderusername": "user",
        "reciusername": "user2",
        "body": "I said that is not last message",
        "sent_at": "2021-05-10T23:09:42Z",
        "lastmessage": {
            "body": "That's conversation's last message!"
        }
    },

【问题讨论】:

    标签: python django api rest postman


    【解决方案1】:

    你可以像这样得到最后一条消息:

    def get_lastmessage(self, obj):
        lastmsg = Message.objects.latest('sent_at')
        data = {'senderusername': obj.senderusername,
            'reciusername': obj.reciusername,
            'body': lastmsg.body
            'sent_at': lastmsg.sent_at
            'last_message': {
                'body': lastmsg.body
            }
        }
      
        return data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 2021-02-03
      • 2018-01-15
      • 1970-01-01
      • 2013-06-13
      • 2018-07-28
      • 2017-05-24
      相关资源
      最近更新 更多