Как получить comment_replies из таблицы в django - PullRequest
1 голос
/ 07 февраля 2020

Я делаю часть комментариев API блога. Я не могу получить ответы, но я могу получить комментарии.

Python модуль: Django:

class Comment(models.Model):
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    comment = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    parent = models.ForeignKey(
        'self', related_name='reply', null=True, blank=True,
        on_delete=models.CASCADE)

Database table for above shown Django code

Над таблицей показаны комментарии, которые хранятся с использованием кода модели комментария Django.

Моя задача: У меня есть идентификатор родительского комментария. И я должен извлечь остальную часть поля КРАСНОГО.

Все, что угодно: Идея, SQL сценарий или Django Запрос

1 Ответ

1 голос
/ 07 февраля 2020

Вы можете добавить свойство в модель с именем «ответы», и оно даст все ответы на эти комментарии.

class Comment(models.Model):
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    comment = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    parent = models.ForeignKey(
        'self', related_name='reply', null=True, blank=True,
        on_delete=models.CASCADE)

    @property
    def replies(self):
        return Comment.objects.filter(parent_id=self.id)

Итак, давайте предположим, что у вас есть родительский комментарий, и вам нужны все ответы на этот комментарий

parent = Comment.objects.get(id=1)
# Replies on this comment is.
print(parent.replies) # It will have only one comment in array with id=9

Теперь, если вам нужны ответы на комментарии с id=9

parent.replies[0].replies # It will give comments with id 10 and 11

Обновление: если вам нужны все вложенные ответы напрямую, вы можете сделать аналогично Django -admin do во время удаление объекта. Сначала он показывает все затронутые объекты

from django.contrib.admin.utils 
collector = NestedObjects(using='default')
collector.collect(parents)
print(collector.data[parents[0].__class__]) # It will print all nested objects comments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...