Skip to content
This repository

Entity Attribute Value

branch: master

Merge pull request #22 from gingerjoos/patch-1

Change get_or_create() to return tuple
latest commit 7aae3e0bfb
dorey dorey authored
Octocat-spinner-32 docs More spelling corrections September 29, 2010
Octocat-spinner-32 eav Change get_or_create() to return tuple December 31, 2013
Octocat-spinner-32 .gitignore Added setup, tweaked docs September 28, 2010
Octocat-spinner-32 README.rst More spelling corrections September 29, 2010
Octocat-spinner-32 Include eav.tests in November 09, 2010



django-eav provides an Entity-Attribute-Value storage model for django apps.

For a decent explanation of what an Entity-Attribute-Value storage model is, check Wikipedia.


This software was inspired / derived from the excellent eav-django written by Andrey Mikhaylenko.

There are a few notable differences between this implementation and the eav-django implementation.

  • This one is called django-eav, whereas the other is called eav-django.
  • This app allows you to to 'attach' EAV attributes to any existing django model (even from third-party apps) without making any changes to the those models' code.
  • This app has slightly more robust (but still not perfect) filtering.


From Github

You can install django-eav directly from guthub:

pip install -e git+git://



Add eav to your INSTALLED_APPS in your project's file.

Register your model(s)

Before you can attach eav attributes to your model, you must register your model with eav:

>>> import eav
>>> eav.register(MyModel)

Generally you would do this in your immediate after your model declarations.

Create some attributes

>>> from eav.models import Attribute
>>> Attribute.objects.create(name='Weight', datatype=Attribute.TYPE_FLOAT)
>>> Attribute.objects.create(name='Color', datatype=Attribute.TYPE_TEXT)

Assign eav values

>>> m = MyModel()
>>> m.eav.weight = 15.4
>>> m.eav.color = 'blue'
>>> m = MyModel.objects.get(
>>> m.eav.weight
>>> m.eav.color

>>> p = MyModel.objects.create(eav__weight = 12, eav__color='red')

Filter on eav values

>>> MyModel.objects.filter(eav__weight=15.4)

>>> MyModel.objects.exclude(name='bob', eav__weight=15.4, eav__color='red')

Documentation and Examples

Something went wrong with that request. Please try again.