Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django count()在post_保存中返回零命中率_Django_Signals - Fatal编程技术网

Django count()在post_保存中返回零命中率

Django count()在post_保存中返回零命中率,django,signals,Django,Signals,我们有一个对话框和一个注释对象。我们在对话框上有一个非规范化字段num_comments,用于跟踪注释的数量。保存或删除新注释时,我们希望适当增加/减少该值 # sender=Comment, called post_save and post_delete def recalc_comments(sender, instance, created=False, **kwargs): # Comments that will be deleted might not have a dia

我们有一个对话框和一个注释对象。我们在对话框上有一个非规范化字段num_comments,用于跟踪注释的数量。保存或删除新注释时,我们希望适当增加/减少该值

# sender=Comment, called post_save and post_delete
def recalc_comments(sender, instance, created=False, **kwargs):
    # Comments that will be deleted might not have a dialog (when dialog gets deleted)
    if not hasattr(instance, "dialog"):
        return

    dialog = instance.dialog
    dialog.update(
        num_comments = sender.public.filter(dialog=dialog).count(),
        num_commentators = sender.public.filter(dialog=dialog).aggregate(c=Count('user',     distinct=True))["c"],
)
开始出现的问题是,对num_comments的查询对于发布的第一条注释返回零。这种情况并非每次都会发生,仅在使用aprox的情况下发生。>结果集中的1000条评论不多,我知道

是否在执行计数时注释尚未保存到数据库?为了使事情进一步复杂化,我们使用Johnny Cache和memcached作为ORM和数据库之间的一个层


任何意见都将不胜感激

据我所知,您希望对数据库方案进行非规范化,以获得最佳查询性能。在这种情况下,我可以向您推荐专门为此目的设计的应用程序-

正如文件所说:

django composition提供了从 通过特殊的泛型模型以简单的声明方式创建模型 字段名为CompositionField

大多数数据非规范化的情况非常普遍,因此 django composition有几个捷径字段,可以处理大多数 是的

CompositionField是提供数据接口的django模型字段 非规范化


你也可以使用。它有助于计算foreignkey相关对象的数量。

请至少在禁用缓存的情况下尝试测试这一点。问题仍然存在吗?你能发布你的模型吗?这样我们就可以看看问题是否存在于其他地方?