我使用两种模型在用户之间构建聊天系统:
class Chat(models.Model):
created = models.DateTimeField(auto_now_add=True)
class Participant(models.Model):
chat = models.ForeignKey(Chat, on_delete=models.CASCADE, related_name='participants')
sender = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
receiver = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
参与者模型中的一条记录表示从用户发送者向用户接收者发送消息的能力。
因此,对于A和B之间的有效私人聊天,将存在两个记录,一个以AS发送方存在,另一个作为接收方,反之亦然。
由于一个用户将永远是启动聊天的第一个用户,而第一个参与者记录可以是AS发送者或B作为发送者,所以我需要知道是否有一个干净和廉价的方式来检查当用户尝试启动聊天时是否存在两个记录,并且如果存在聊天返回ID。
如何在同一查询中搜索记录的存在(发件人=A,接收器=B)和(发件人=B,接收器=A)?