Есть модель ссылки на чат:
class ChatRef(models.Model):
chat = models.ForeignKey(Chat, on_delete=models.CASCADE)
user = models.ForeignKey(Contact, on_delete=models.CASCADE, related_name='chat_refs')
Есть модель чата:
class Chat(models.Model):
participants = models.ManyToManyField(Contact, related_name='chats')
messages = models.ManyToManyField(Message, blank=True)
is_chat = models.BooleanField(default=True)
creator = models.ForeignKey(Contact, null=True, on_delete=models.DO_NOTHING)
name = models.CharField(max_length=30, null=True
Есть также вью, которая выводит друзей. Для того, чтобы все правильно работало, моему фронту нужен флажок о том, существует ли ссылка на чат. Если ее не существует фронт отправит запрос и она создасться
def get_queryset(self):
queryset = Contact.objects.exclude(id=self.request.user.id).annotate(
chat_id=Sum('chats__id', filter=Q(chats__participants=self.request.user))
).annotate(
exists_ref=Exists(Subquery(
ChatRef.objects.filter(
user=self.request.user,
chat=Subquery(Chat.objects.get(
participants__in=[self.request.user, OuterRef(OuterRef('id'))],
is_chat=True
))
))
)
)
return queryset.filter(is_active=True)
Но этот код не работает и выдает
Как заставить это работать корректно?