I did the initial installation steps and created the initial revisions, but then when I save a model in django shell, the new revision is not created:
In [1]: s = Shop.objects.all()[0]
In [2]: import reversion
In [3]: s.name = 'a'
In [4]: s.save()
In [5]: s.name = 'b'
In [6]: s.save()
In [7]: reversion.get_for_object(s)
Out[7]: [<Version: <1> "X">]
This is the initial revision.
When I update the model from a view, a revision is created successfully.
What am I missing?
The models.py file is:
...
class Shop(Model):
...
import reversion
reversion.register(Shop)
<EOF>
I see a reversion method among post_save
receiver, although it isn't called when I debug it.
I have Django v1.4.1, reversion v1.6.2.
I wrote django-reversion, so I think I can shed some light on this issue.
A Version of a model is automatically saved when a model is saved, providing the following are true:
Point 1 can be achieved by either registering a model with
VersionAdmin
, or explicitly callingreversion.register()
in your models.py file.Point 2 can be achieved by using
RevisionMiddleware
, or thereversion.create_revision()
decorator or context manager. Any admin views inVersionAdmin
also save a revision.So, if your shell is not creating Versions, then either point 1 or point 2 is not being met. Here's how to fix it:
reversion.register()
in your models.py file.reversion.create_revision()
context manager around your call to save.More about this sort of thing on the Low Level API wiki page:
http://django-reversion.readthedocs.org/en/latest/api.html