Невозможность упорядочить по нескольким столбцам и разные ответы на один и тот же запрос в оболочке django и через ListAPIView
Я пишу простую функцию чата для приложения бронирования, где customer может отправлять сообщения owner и owner может отвечать на эти сообщения. Также owner может быть и customer.
Я храню эти сообщения в таблице, которая создается этой моделью -
class CustomerOwnerMessages(BaseModel):
message = models.CharField(max_length=255, blank=False, null=False)
customer = models.ForeignKey(
User,
on_delete=models.PROTECT,
blank=False,
null=False,
related_name="message_from_customer",
)
owner = models.ForeignKey(
User,
on_delete=models.PROTECT,
blank=False,
null=False,
related_name="message_to_owner",
)
Моя задача - получить список customers тех, кто до сих пор обменивался сообщениями с вошедшим owner.
- Допустим,
pkэтойownerбудет1. Поэтому сначала я планировал получить объект моделиUserследующим образом -
owner = User.objects.get(pk=1)
- Затем я решил получить все сообщения этого пользователя, отправленные или полученные в качестве владельца, из модели
CustomerOwnerMessages. Обратите внимание, что я определилrelated_nameдля каждого внешнего ключа в той же модели.
messages = owner.message_to_owner.filter()
- У меня есть список всех экземпляров
messages, отправленных этимowner. Теперь мне нужен список всех уникальных случаев, в которых комбинация(owner, customer)не повторяется. Поэтому я решил упорядочить сообщения следующим образом -
active_chats = messages.order_by('owner', 'customer')
Проблема 1 -
Проблема с этими строками кода в том, что если я запускаю это через оболочку Django, то я получаю набор запросов в качестве ответа, но ответ не упорядочен по ("customer", "owner") вместо этого я получаю все экземпляры CustomerOwnerMessages, где owner=1.
Задача 2 -
Затем я также запускаю это через ListAPIView -
def get_queryset(self):
return User.objects.filter(pk=self.request.user.id).message_from_customer.filter().order_by("customer", "owner")
В ответе на этот запрос ListAPIView ошибка -
'QuerySet' object has no attribute 'message_from_customer'
На правильном ли я пути? Где я ошибся, чтобы увидеть проблемы с плотиной?