DjangCounterCacheField使反规范化和跟踪相关模型计数变得非常容易。

django-counter-cache-field的Python项目详细描述


https://travis-ci.org/enjoy2000/django-counter-cache-field.svg?branch=master

通过ForeignKey缓存与另一个对象关联的对象的总数有时很有用 关系。例如,与一篇文章相关联的评论总数。在

django counter字段使反规范化和保持这些计数器为最新很容易。在

快速入门

  1. 安装django计数器字段:

    pip install django-counter-cache-field
    
  2. 将“django_counter_field”添加到已安装的应用程序设置中:

    ^{pr2}$ 在
  3. 将CounterCacheField添加到模型中:

    from django_counter_field import CounterCacheField
    
    
    class Article(models.Model):
        comment_count = CounterCacheField()
    
  4. 将相关外键字段与信号中的计数器字段连接起来:

    connect_counter('comment_count', Comment.article)
    

无论何时创建评论,关联文章上的评论数都将增加。如果评论是 删除后,注释计数将自动递减。在

概述

创建新计数器需要三个简单步骤:

  1. CounterCacheField字段添加到父模型。在
  2. CounterMixinmixin添加到子模型中。在
  3. 使用connect_counter将子模型与新计数器连接起来。在

大多数计数器都很简单,因为您希望对所有子对象进行计数。但是,有时对象应该 根据一个或几个条件计算的。例如,您可能不希望统计一篇文章中的all评论,但是 仅限已批准的评论。您可以通过提供第三个is_in_counter_func来创建条件计数器 连接计数器的参数:

connect_counter(‘comment_count’, Comment.article, lambda comment: comment.is_approved)

is_in_counter_func函数将使用Comment对象调用,并且必须返回True 应该算在内。它不必关心检查注释是否被删除,django counter字段 默认情况下会这样做。在

回填

通常,您会将CounterCacheField添加到已经有大量关联对象的模型中。当一个计数器 的值初始化为零。此值可能不正确。django counter字段提供了一对 允许您重新生成计数器值的管理命令:

  1. 列出所有可用计数器:

    $ python manage.py list_counters

  2. 使用list_counters给出的计数器名称之一重建计数器

    $ python manage.py rebuild_counter <counter_name>

注意:管理命令只更新至少有一个子对象的计数器 对象。例如至少有一条评论的文章。没有评论的文章将不会更新。这个 是一个有意识的限制;这种特性的用例似乎非常有限,如果有的话。在

文件

$ pip install Sphinx $ cd docs $ make html Open build/html/index.html

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在点击JButton触发的进程仍在处理时更新JLabel?   try-catch为什么Java有嵌套的try语句?   java SSH命令执行失败,出现异常“net.schmizz.sshj.connection.ConnectionException:引发连接重置异常”   java在ApacheCamel的接口类解析器中,resolveMandatoryClass(字符串名称)有什么用途?   java如何在Eclipse远程调试器中找到有问题的线程?   java线程:containerlaunch退出代码127的异常   lambda左连接Java中的2个对象列表   Swift 2.0协议扩展和Java/C抽象类之间有区别吗?   安卓改造:使用GSON将JSON解析为多个Java对象   Spring中服务层的java角色(澄清)   html Java与网站的通信   Spring boot rest api是在不创建java类的情况下将getResultList()转换为映射以显示响应的最佳方法吗?   使用“getElementById”从javascript获取值到java   java如何在文本视图中以粗体和多色显示文本   java是设置TextView颜色的最有效方法