2012-09-03 9 views
8

gemacht speichern Ich habe die initial installation Schritte und schuf die ersten Revisionen, aber dann, wenn ich ein Modell in django Shell speichern, wird die neue Version nicht erstellt:Django Reversion Revisionen nicht in der Schale

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

Dies ist die erste Überarbeitung.

Wenn ich das Modell aus einer Ansicht aktualisiere, wird eine Revision erfolgreich erstellt.

Was fehlt mir?

Die models.py Datei ist:

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


import reversion 
reversion.register(Shop) 
<EOF> 

ich eine Reversion-Methode unter post_save Empfänger sehen, obwohl es nicht aufgerufen wird, wenn ich es debuggen.

Ich habe Django v1.4.1, Reversion v1.6.2.

+0

[Dieses Thema] (https://groups.google.com/forum/ ? fromgroups = #! msg/django-reversion/s7p3nTemR04/tMTF1ZuOjmEJ) wirft etwas Licht auf das Problem. Wo registrieren Sie Ihre Modelle mit Revisionen? –

+0

Könnten Sie versuchen, die Importreversion der Zeilen vorzunehmen? reversion.register (Shop) 'am Ende der Datei' models.py', in der du 'Shop' definierst, und siehst, ob das das Problem behebt? –

+0

@DavidRobinson: Es ist schon da, ganz unten. Und Revisionen werden nur in Ansichten gespeichert. –

Antwort

21

Ich schrieb Django-Reversion, also denke ich, dass ich etwas Licht in dieses Thema bringen kann.

Eine Version eines Modell wird automatisch gespeichert, wenn ein Modell gespeichert wird, wird die folgende Bereitstellung wahr:

  1. Das Modell mit django-Reversion registriert ist.
  2. Der Codeblock wird als innerhalb einer Revision markiert markiert.
  3. Punkt 1 kann entweder durch Registrieren eines Modells mit VersionAdmin oder durch explizites Aufrufen von reversion.register() in Ihrer models.py-Datei erreicht werden.

    Punkt 2 kann mithilfe von RevisionMiddleware oder reversion.create_revision() Dekorator oder Kontextmanager erreicht werden. Alle Admin-Ansichten in VersionAdmin speichern auch eine Revision.

    Wenn also Ihre Shell keine Versionen erstellt, wird entweder Punkt 1 oder Punkt 2 nicht erfüllt. Hier ist, wie Sie es beheben können:

  4. Wenn Sie VersionAdmin verwenden, importieren Sie das entsprechende Admin-Modul in Ihrem Shell-Code, um die automatische Registrierung zu starten. Alternativ rufen Sie in Ihrer models.py-Datei reversion.register() auf.
  5. In Ihrem Shell-Code, mit dem reversion.create_revision() Kontext-Manager um Ihren Anruf zu speichern.
with reversion.create_revision(): 
    s.save() 

Mehr über diese Art der Sache auf der Low-Level-API Wiki-Seite:

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

+0

Das macht Sinn und ich habe mir die https: // github genommen.com/etianen/django-reversion/wiki/Low-Level-API-Wiki-Seite .... das sagte, was ist das Beste, um sicherzustellen, dass ein Modell save() immer eine Version erstellt? Signale? save() überschreiben? –

+0

Toller Tipp (# 2). Ich schlage vor, dass dies zu den Installationsanweisungen von django-reversion hinzugefügt wird, da ich es deaktiviert hatte und dies nicht bemerkt habe, bis ich diesen Beitrag gefunden habe ... – Davy

Verwandte Themen