Получение связанных данных из поля 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
}
для чего-то более последовательного можно использовать сериализаторы