【问题标题】:Trouble understanding how django-fluent-comments code works无法理解 django-fluent-comments 代码的工作原理
【发布时间】:2014-03-23 22:15:54
【问题描述】:

我最近花了一些时间在 django-fluent-cmets 中进行挖掘。我知道一点 django,但我完全被这个包的工作原理难住了。

基本上,我不明白获取对象的 cmets 的实际查询是在哪里进行的。

在函数“FluentCommentsList(node)”中,包含 cmets 的查询集似乎来自第 67 行的此调用:

comment_list = context['comment_list']'

我不知道填充“comment_list”的实际查询是在哪里进行的。看起来 models.py 中的函数 get_comments_for_model 可能与此有关,但我尝试将其注释掉,并且 cmets 仍然出现在页面上。

最后,我不明白外键与用户的关系是如何工作的。在 cmets 上的数据库中 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。

'long' object has no attribute 'user_picture'

有人可以解释发生了什么吗?我真正想做的就是通过用户的外键访问 user_picture 字段,但更好地理解代码也会非常好。

非常感谢,

【问题讨论】:

    标签: django django-comments


    【解决方案1】:

    Django-fluent-cmets 在django.contrib.comments 中使用默认的Django Comment 模型。你看到的FluentCommentsList 实际上是一个模板标签,它从调用模板接收上下文——如果你想让标签工作,包括comment_listtarget_object_id

    每个Comment 都包含一个ForeignKey 给用户。您收到错误的原因是您尝试访问user_id 上的字段,而不是user 上的字段。如果您的 User 模型包含 user_picture 字段,则以下内容应该有效:

    coms = context['comment_list']
    for c in coms:
        print c.user.user_picture
    

    【讨论】:

    • 啊,好吧,那么这是一个愚蠢的错误。非常感谢您指出这一点。但是,现在我有这部分工作,我仍然需要修改获取 cmets 的原始查询,以便我可以添加相关的预取并避免触发对每个评论的查找以获取个人资料图片。任何想法发生在哪里,看起来它必须是我指出的查询,但修改它似乎没有任何改变。有什么想法吗?
    • 现在想通了,它是从 cmets 应用程序中获取的。感谢您的回答已被接受,因为它当时对我有很大帮助..
    • 如何删除 的评论日期和那个?表示如何修改评论在立即发布后的显示方式。
    猜你喜欢
    • 2021-09-07
    • 2014-04-08
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多