django-dbcache-fields 0.9.3

Creator: codyrutscher

Last updated:

Add to Cart

Description:

djangodbcachefields 0.9.3

Version:
0.9.3
Docs:
https://django-dbcache-fields.readthedocs.io/

Download:
https://pypi.python.org/pypi/django_dbcache_fields

Source:
https://github.com/maykinmedia/django-dbcache-fields

Keywords:
django, database, cache, methods, decorator




About
This library provides a decorator dbcache that caches the result of your
Django Model methods in your database.
It adds a regular Field on your Model for each method that you
decorate. This means you can use all ORM-functions like aggregation and
migrations. You can use existing fields or let dbcache create the field
for you.
You can also invalidate the cached value by creating a _dirty_ function or by
indicating which other models affect the this cached value. By default, the
cached value is only updated when the model is saved.


Installation
You can install django_dbcache_fields either via the Python Package Index
(PyPI) or from source.
To install using pip:
$ pip install -U django_dbcache_fields


Usage
To use this with your project you need to follow these steps:

Install the django_dbcache_fields library:
$ pip install django_dbcache_fields

Add django_dbcache_fields to INSTALLED_APPS in your Django
project’s settings.py:
INSTALLED_APPS = (
# ...,
'django_dbcache_fields',
)
Note that there is no dash in the module name, only underscores.

All done. You can now decorate methods in your Model with
@dbcache.



Example
Simple example to show what dbcache does:
from django.db import models
from django_dbcache_fields.decorators import dbcache

class Ingredient(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=4, decimal_places=2)

class Pizza(models.Model):
name = models.CharField(max_length=100)
ingredients = models.ManyToManyField(Ingredient)

@dbcache(models.DecimalField(max_digits=6, decimal_places=2,
blank=True, null=True), invalidated_by=['myapp.Ingredient'])
def get_price(self):
return self.ingredients.aggregate(total=Sum('price'))['total'] or Decimal()
Every call to get_price would normally perform a database query to
calculate the total price of all ingredients. However, the dbcache
decorator caused a new field to be added to the model: A DecimalField that
can store the resulting value of the get_price function, so it doesn’t
need to perform the same query over and over again.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.