Проблемы с пониманием того, как работает код django-fluent-comments

Я провел немного времени, копаясь в django-fluent-comments недавно. Я немного знаю django, но совершенно не знаю, как работает этот пакет.

По сути, я не понимаю, где делается фактический запрос для получения комментариев к объекту.

В функции ' FluentCommentsList (node) ' набор запросов, содержащий комментарии, появляется из этого вызова в строке 67:

comment_list = context['comment_list']'

Я понятия не имею, где сделан фактический запрос для заполнения 'comment_list'. Похоже, что функция get_comments_for_model в models.py может иметь к этому какое-то отношение, но я попытался закомментировать это, и комментарии все равно появляются на странице независимо от этого.

Наконец, я не понимаю, как работает отношение внешнего ключа к пользователю. В базе данных user_id для комментариев это внешний ключ к пользовательской модели, но когда я изменил FluentCommentsList так:

class FluentCommentsList(Node):
    def render(self, context):
        coms = context['comment_list']
        for c in coms:
            print c.user_id.user_picture

Это приводит к ошибке ниже, где кажется, что модель пользователя интерпретируется как длинная.

'long' object has no attribute 'user_picture'

Может, кто-нибудь объяснит, что происходит, пожалуйста? Все, что я на самом деле пытаюсь сделать, - это получить доступ к полю user_picture через внешний ключ для пользователя, но было бы также неплохо немного лучше понять код.

Большое спасибо,

1 ответ

Решение

Django-fluent-comments использует Django по умолчанию Comment модель в django.contrib.comments, FluentCommentsList вы видите, на самом деле тег шаблона, который получает контекст из вызывающего шаблона - включая comment_list или же target_object_id если вы хотите, чтобы тег работал.

каждый Comment включает в себя ForeignKey пользователю. Причина, по которой вы получаете ошибку, состоит в том, что вы пытаетесь получить доступ к полю user_id, не на user, Если твой User модель включает в себя user_picture поле, должно работать следующее:

coms = context['comment_list']
for c in coms:
    print c.user.user_picture
Другие вопросы по тегам