@reqww

Как здесь правильно использовать OuterRef?

Есть модель ссылки на чат:
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)


Но этот код не работает и выдает
5f9404812efca551403538.png

Как заставить это работать корректно?
  • Вопрос задан
  • 1102 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы