gpt4 book ai didi

python - 如何在 Django 中获取带有用户 ID 的 ManyToManyField 对象?

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:26 25 4
gpt4 key购买 nike

我有一些内置的 Django Channels Chat,我创建了一个 Chat 模型,我可以在其中存储消息(它就像一个带 ID 的 CHAT ROOM),我想通过 2 个用户 ID 获取单个对象。

我尝试了类似 Chat.objects.filter(participiants__in=[ID1,ID2]) 的东西,但它只返回他们所在的每一个聊天。

def post(self,request):

sender = UserProfile.objects.get(user_id=request.user.id)

message = request.data.get('message')
post_id = request.data.get('post_id')
recipient_id = request.data.get('recipient_id')

chat_room = Chat.objects.filter(participiants__in=[sender, recipient_id])

class Chat(models.Model):
participiants = models.ManyToManyField(UserProfile, related_name="chats")
messages = models.ManyToManyField(Message, blank=True, related_name="messages")

def get_room_messages(self):
messages = self.messages.order_by('-timestamp').all()
return [[i.text,i.sender_id,i.link,i.post_id] for i in messages]

最佳答案

过滤后你应该计算参与者的数量,并检查它是否等于2,比如:

from django.db.models import <b>Count</b>

chat_rooms = Chat.objects.filter(
participiants__in=[sender, recipient_id]
).annotate(
<b>nparticipants=Count('participiants')</b>
).filter(<b>nparticipants=2</b>)

如果只有一个这样的 Chat 对象,您可以使用 .get(..) 代替:

from django.db.models import Count

chat_rooms = Chat.objects.filter(
participiants__in=[sender, recipient_id]
).annotate(
nparticipants=Count('participiants')
)<b>.get(</b>nparticipants=2<b>)</b>

关于python - 如何在 Django 中获取带有用户 ID 的 ManyToManyField 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com