2012-09-03 8 views
8

I hicieron los initial installation pasos y creado las revisiones iniciales, pero entonces al guardar un modelo en el shell django, la nueva revisión no se crea:Django reversión no guarda revisiones realizadas en shell

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">] 

Este es la revisión inicial.

Cuando actualizo el modelo desde una vista, se crea una revisión con éxito.

¿Qué me estoy perdiendo?

El archivo models.py es:

... 
class Shop(Model): 
    ... 


import reversion 
reversion.register(Shop) 
<EOF> 

veo un método de reversión entre post_save receptor, aunque no se llama cuando depurarlo.

Tengo Django v1.4.1, reversión v1.6.2.

+0

[Este hilo] (https://groups.google.com/forum/ ? fromgroups = #! msg/django-reversión/s7p3nTemR04/tMTF1ZuOjmEJ) arroja algo de luz sobre el tema. ¿Dónde estás registrando tus modelos con revisiones? –

+0

¿Podría intentar poner las líneas 'reversión de importación; reversion.register (Shop) 'en la parte inferior del archivo' models.py' donde define 'Shop', y vea si eso soluciona el problema? –

+0

@DavidRobinson: Ya está allí, justo en la parte inferior. Y las revisiones se guardan solo en vistas. –

Respuesta

21

Escribí django-reversión, así que creo que puedo arrojar algo de luz sobre este tema.

una versión de un modelo se guarda automáticamente cuando se guarda un modelo, proporcionando las siguientes son verdaderas:

  1. El modelo se ha registrado en django-reversión.
  2. El bloque de código está marcado como dentro de una revisión.

El punto 1 se puede lograr ya sea por el registro de un modelo con VersionAdmin, o explícitamente llamando reversion.register() en su archivo models.py.

El punto 2 se puede lograr utilizando RevisionMiddleware o el decorador reversion.create_revision() o administrador de contexto. Cualquier vista de administrador en VersionAdmin también guarda una revisión.

Por lo tanto, si su caparazón no está creando versiones, entonces el punto 1 o el punto 2 no se están cumpliendo. Así es cómo solucionarlo:

  1. Si está utilizando VersionAdmin, importe el módulo de administración correspondiente en su código de shell para iniciar el registro automático. Alternativamente, llame al reversion.register() en su archivo models.py.
  2. En su código de shell, usando el administrador de contexto reversion.create_revision() alrededor de su llamada para guardar.
with reversion.create_revision(): 
    s.save() 

Más sobre este tipo de cosas en la página wiki de la API de bajo nivel:

http://django-reversion.readthedocs.org/en/latest/api.html

+0

Esto tiene sentido y me tomé la libertad de https: // github.com/etianen/django-reversión/wiki/Low-level-API wiki page .... que dijo cuál es el mejor para asegurarse de que un modelo save() siempre está creando una versión? señales? save() anular? –

+0

Gran propina (n. ° 2). Sugiero que esto se agregue a las instrucciones de instalación de django-reversión ya que lo tuve deshabilitado y no lo noté hasta que encontré esta publicación ... – Davy

Cuestiones relacionadas