Получение связанных данных из поля ManyToManyField в Django

Работа с ManyToManyField Я хочу получить данные всех пользователей, относящихся ко всем запрашиваемым объектам модели, вместе с данными других полей в модели.

Например, для следующей модели у меня есть 2 пользователя, связанных с этим "ChatRoom"

class ChatRoomParticipants(models.Model):
    user = models.ManyToManyField(User, related_name='chatroom_users')
    room = models.ForeignKey(ChatRoom, on_delete=models.PROTECT)

С помощью приведенного ниже запроса

chatrooms = list(ChatRoomParticipants.objects.filter(user=user).values('user__user_uid', 'room__id', 'room__name'))

Я в состоянии получить

[{'user__user_uid': UUID('f4253fbd-90d1-471f-b541-80813b51d610'), 'room__id': 4, 'room__name': 'f4253fbd-90d1-471f-b541-80813b51d610-872952bb-6c34-4e50-b6fd-7053dfa583de'}]

Но я ожидаю чего-то вроде

[{'user__user_uid': UUID('f4253fbd-90d1-471f-b541-80813b51d610'), 'user__user_uid': UUID('80813b51d610-872952bb-6c34-4e50-b6fd-7053dfa583de'), 'room__id': 4, 'room__name': 'f4253fbd-90d1-471f-b541-80813b51d610-872952bb-6c34-4e50-b6fd-7053dfa583de'}]

Я искал и нашел, что могу сделать что-то вроде

user_data = chatrooms.users.all().values('user_uid')

Но вышеуказанное не работает хорошо с filter и я бы пропустил данные по room.

Примечание: я знаю, что это не правильный метод для того, что я пытаюсь достичь, если кто-нибудь может просветить, какой правильный способ достижения тех же данных.

Ваш пример несколько запутан, но я думаю, что то, что вы ищете, это найти информацию о пользователях, связанных с одной и той же комнатой.

chat_room = ChatRoomParticipants.objects.get(id=id_room)
users_chat = chat_room.user.all().values_list('user_uid', flat=True)
data = {
    "room__id": chat_room.room.id
    "room__name": chat_room.room.name
    "users" : users_chat
}

для чего-то более последовательного можно использовать сериализаторы

Вернуться на верх