我有一些内置的 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>
