我试图在收件箱页面中的两个用户之间显示最后一条消息。 但是我在选择与主要用户(已登录用户)联系的所有用户时遇到了一些麻烦。
这是我的models.py
:
class Message(models.Model):
"""
Model for user messages.
- Who
- Whom
- When
- Message
- Status
"""
user_sender = models.ForeignKey(User, related_name="sender")
user_receiver = models.ForeignKey(User, related_name="receiver")
send_date = models.DateTimeField(auto_now_add=True)
message = models.CharField(max_length=500)
status = models.BooleanField(default=False)
def __unicode__(self):
return u'%s %s ->%s' % (self.send_date, self.user_sender, self.user_receiver)
这是我的serializer.py
:
class MessagePreviewSerializer(serializers.ModelSerializer):
info = UserProfileSerializer(many=True, read_only=True)
last_message = serializers.SerializerMethodField('message_preview')
def message_preview(self, obj):
user_id = self.context.get("user_id")
# getting last message between user_id and obj.id
return last_msg
class Meta:
model = User
fields = ('id', 'username', 'first_name', 'last_name', 'email', 'info', 'last_message')
我在views.py
:
contacts = Message.objects.filter(Q(user_sender_id=token.user_id) |
Q(user_receiver_id=token.user_id)).values('user_receiver_id')
serializer = MessagePreviewSerializer(contacts, context={'user_id': token.user_id}, many=True)
所以我的主要问题是获取用户列表,这些用户是"联系人" (有消息)使用token.user_id
,然后调用serializer
并在它们之间获取lastmsg
并序列化。
这是真的吗?如果是的话,我的代码中出了什么问题?