Skip to content

yannik-ammann/django-hvad

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django-hvad package coverage build

Model translations made easy.

This project adds support for model translations in Django. It is designed to be unobtrusive, efficient and reliable. On the technical side, it uses an automatically created Translations Model to store translatable fields in arbitrary languages with a foreign key to the main model, enabling fast queries.

Started in 2011, hvad has grown mature and is now used on large scale applications.

Quick links:

Features

  • Simple - only 3 new queryset methods.
  • Natural - use Django ORM as usual, it just became language aware.
  • Fast - no additional queries for reads, just an inner join to an indexed key.
  • Complete - supports relationships, custom managers, proxy models, and abstract models.
  • Batteries included - translation-enabled forms and admin are provided.
  • Reliable - more than 270 test cases and counting. coverage build
  • Compatible with Django 1.4 to 1.7, running Python 2.7, 3.3 or 3.4.

Releases

Django-hvad uses the same release pattern as Django. The following versions are thus available:

  • Stable branch 0.4, available through PyPI and git branch releases/0.4.x.
  • Stable branch 0.5, available through PyPI and git branch releases/0.5.x.
  • Stable branch 1.0, available through PyPI and git branch releases/1.0.x.
  • Development branch 1.1, available through git branch master.

Stable branches have minor bugfix releases as needed, with guaranteed compatibility. See the installation guide for details, or have a look at the release notes.

Example Use

Book.objects.all()

Compatible by default: returns all objects, without any translated fields attached. Starting from v1.0, default behavior can be overriden to work like next query:

Book.objects.language().all()

Returns all objects as translated instances, but only the ones that are translated into the currect language. You can also specify which language to get, using e.g.:

Book.objects.language("en").all()

Usual queryset methods work as usual: let's get all books as translated instances, filtering on the translatable title attribute, returning those that have Petit Prince in their French title, ordered by publication date (in their French edition):

Book.objects.language("fr").filter(title__contains='Petit Prince').order_by('release')

Other random examples:

# last German book published in year 1948 Book.objects.language("de").filter(release__year=1948).latest()

# other books from the same author as mybook. Cache author as well. Book.objects.language().select_related('author').filter(author__books=mybook)

# books that have "Django" in their title, regardless of the language Book.objects.language('all').filter(title__icontains='Django')

More examples in the quickstart guide.

Thanks to

Jonas Obrist (https://github.com/ojii) for making django-nani and for helping me with this project.

About

Painless translations in django, using the regular ORM. Integrates easily into existing projects and apps. Easy convertible from django-multilingual-ng.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 97.8%
  • Makefile 1.1%
  • Other 1.1%