@FulTupFul

Как отобразить имя получателя в чате?

Использую django и drf
class Thread(models.Model):
    participants = models.ManyToManyField(User)
    last_message = models.DateTimeField(null=True, blank=True, db_index=True)
    is_chat = models.BooleanField('Чат', default=True)
    is_group = models.BooleanField('Группа', default=False)

    def get_last_message(self):
        try:
            return self.message_set.latest('id').text
        except:
            return ""


class Message(models.Model):
    text = models.TextField()
    sender = models.ForeignKey(User, on_delete=models.CASCADE)
    thread = models.ForeignKey(Thread, on_delete=models.CASCADE)
    datetime = models.DateTimeField(auto_now_add=True, db_index=True)

    def __str__(self):
        return self.text

Вот такая вьюха:
class Threads(APIView):
    permission_classes = (permissions.IsAuthenticated,)

    def get(self, request, format=None):
        queryset = User.objects.get(username=request.user).thread_set.all()
        serializer = ThreadSerializer(queryset, many=True)
        return Response(serializer.data)

И вот такой сериализатор:
class ThreadSerializer(serializers.ModelSerializer):

    participants = UserWrap(many=True)
    class Meta:
        model = Thread
        fields = ('id','get_last_message', 'participants')

Получается примерно вот такое api:
[
    {
        "id": 1,
        "get_last_message": "Hi",
        "participants": [
            {
                "id": 1,
                "username": "test",
                "pic": "/media/I45TU27WKS8U.png"
            },
            {
                "id": 2,
                "username": "Just",
                "pic": "/media/EUHT4ZC5ZE6R.png"
            }
        ]
    },

Как в participants отобразить только данные адресата? Думал через прокидывание второго запроса с помощью exclude(), но такое невозможно.
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы