Невозможность упорядочить по нескольким столбцам и разные ответы на один и тот же запрос в оболочке 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'
На правильном ли я пути? Где я ошибся, чтобы увидеть проблемы с плотиной?