Каков наилучший способ получить все связанные экземпляры моделей в Django? - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь создать систему обмена сообщениями в Django, и я столкнулся с проблемой: как мне эффективно найти все сообщения, связанные в потоке?

Давайте представим, что у меня есть две модели:

class Conversation(models.Model):
    sender = models.ForeignKey(User)
    receiver = models.ForeignKey(User)
    first_message = models.OneToOneField(Message)
    last_message = models.OneToOneField(Message)

class Message(models.Model):
    previous = models.OneToOneField(Message)
    content = models.TextField()

(код не проверен, я уверен, что он не будет работать как есть)

Поскольку он спроектирован как простой связанный список, является ли это единственным способом рекурсивного обхода? Должен ли я попытаться получить предыдущий предыдущий, пока не найду первый, или есть способ запросить их все более эффективно?

1 Ответ

1 голос
/ 11 апреля 2020

Я использую сериализатор Rest Framework с глубиной. Так что если у вас есть сериализатор со значением глубины до 3. Я получу полную модель любого внешнего ключа, доступного до трех родителей.

https://www.django-rest-framework.org/api-guide/serializers/#specifying -nested-serialization

class AppliedSerializer(serializers.ModelSerializer):
    class Meta:
        model = Applied
        fields = ("__all__")
        depth = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...