Django count()在post_保存中返回零命中率
我们有一个对话框和一个注释对象。我们在对话框上有一个非规范化字段num_comments,用于跟踪注释的数量。保存或删除新注释时,我们希望适当增加/减少该值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
# 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相关对象的数量。请至少在禁用缓存的情况下尝试测试这一点。问题仍然存在吗?你能发布你的模型吗?这样我们就可以看看问题是否存在于其他地方?