为django模型将生成的字段保存在缓存中。

paper的Python项目详细描述


https://travis-ci.org/ActivKonnect/paper.svg?branch=develop

为django模型将生成的字段保存在缓存中。

用法

您有两个选项:@paper将帮助您创建存储在 django的缓存和@cardboard将在模型中创建一个常规字段并在中更新它 自动数据库。

@纸张

就像@propertydecorator一样,您只需要使用@paperdecorator,它将 将类的方法转换为缓存属性。

classModelA(models.Model):name=models.TextField()@paper(1,[('testpaper.ModelB',lambdai:ModelA.objects.filter(children=i)),])defcount(self):returnModelA.objects\
            .filter(pk=self.pk)\
            .annotate(count=Coalesce(Sum('children__count'),0))\
            .values_list('count',flat=True)[0]classModelB(models.Model):parent=models.ForeignKey('ModelA',related_name='children')count=models.IntegerField()

@paper接受两个参数:

  • 方法的版本号,以防更改返回内容的格式。由 例如,假设您返回一个复杂的非规范化数据结构。如果在某个时候你 要在其中添加一些数据,只需增加版本号,它就会使 自动缓存
  • 模特/李斯特夫妇的列表。 -模型要么是模型类,要么是'app.model'字符串 -lister接受一个参数,它是更新模型的一个实例(这里是modelb 返回要失效的受影响对象的列表(这里是modela对象的queryset)。

该值将使用django的默认缓存进行缓存。请注意,这需要缓存 在所有web工作者实例中共享,否则无效将没有任何预期的 功效

无效是基于django信号的,因此需要调用save()delete()。 以便正确工作。不会自动检测批量/SQL操作。

@纸板

使用与@paper非常相似,主要区别在于没有版本控制和 结果将存储在模型本身中,而不是缓存它

classModelA(models.Model):name=models.TextField()@cardboard(models.IntegerField(default=0),[('testpaper.ModelB',lambdai:ModelA.objects.filter(children=i)),])defcount(self):returnModelA.objects\
            .filter(pk=self.pk)\
            .annotate(count=Coalesce(Sum('children__count'),0))\
            .values_list('count',flat=True)[0]classModelB(models.Model):parent=models.ForeignKey('ModelA',related_name='children')count=models.IntegerField()

@cardboard有两个参数:

  • 将用于存储结果的字段你必须给它一个合理的默认值, 因为在创建对象时不会进行计算。计算仅由 dependencies函数。
  • 依赖项列表,就像在@paper中一样。

对于这种技术,同样的说法是save()/delete()驱动的:批量或sql操作 不会触发重新计算。

许可证

本软件由Activkonnect根据WTFPL的条款授权。

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

推荐PyPI第三方库


热门话题
Java:字符串。RTL设备语言用标志“+”格式化,数字后加符号   java GAE作为桌面应用程序(Swing)的服务提供商   java将InputStream转换为FileInputStream不适用于Apache POI   java外部Voronoi库“网格”:什么是草图和处理?   重载重写的泛型方法java   java显示组织上设置的错误。springframework。验证。jsp中的错误对象   java一些Spring模型属性没有显示在我的JSP中   java无法编译Guava 23的SimpleTimeLimiter示例   java如何更改JTree中的“根”目录名?   java如何在安卓中对相对布局产生连锁反应?   java错误:org。冬眠例外SQLGrammarException:无法提取结果集,dateAccessed是未知列   如何使用java监听JSON文件更新   由抽象封闭类创建的匿名内部类能否通过反射确定实现类?