Здравствуйте.
Необходимо получить и сериализовать последнее сообщение между юзерами.
Использую django/django rest framework.
Модель:
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)
Я знаю только айди юзера.
Мой план действий:
1. Получить все айдишники юзеров с кем у юзера есть сообщения(например: 1,2,3)
2. Получить последнее сообщение(делает ордер по дате, берем одно значение)
3. Сериализируем это все.
Вот что у меня сейчас:
Вьюхи
users1 = Message.objects.filter(Q(user_sender_id=token.user_id) |
Q(user_receiver_id=token.user_id))\
.values('user_sender_id')
users2 = Message.objects.filter(Q(user_sender_id=token.user_id) |
Q(user_receiver_id=token.user_id))\
.values('user_receiver_id')
users = User.objects.filter(Q(id__in=users1) |
Q(id__in=users2))
serializer = MessagePreviewSerializer(users, context={'user_id': token.user_id}, many=True)
Сериалайзеры
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")
message = get_object_or_404(Message, Q(user_sender_id=user_id, user_receiver_id=obj.id) |
Q(user_receiver_id=user_id, user_sender_id=obj.id))
return message.message
class Meta:
model = User
fields = ('id', 'username', 'first_name', 'last_name', 'email', 'info', 'last_message')
Естественно это неправильно и код не работает)
Прошу помочь мне, как я могу это сделать?