2012-09-03 12 views
8

Zrobiłem initial installation kroki i stworzył początkowe wersje, ale wtedy, kiedy zapisać model w Django skorupy, nowa wersja nie jest tworzony:Django powrót nie zapisuje poprawki dokonane w skorupkach

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

Jest początkowa wersja.

Po zaktualizowaniu modelu z widoku pomyślnie tworzona jest wersja.

Czego mi brakuje?

Plik models.py jest:

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


import reversion 
reversion.register(Shop) 
<EOF> 

widzę metody rewersji wśród post_save odbiornika, choć nie jest wywoływana, gdy debugować go.

Mam Django v1.4.1, reversion v1.6.2.

+0

[Wątek] (https://groups.google.com/forum/ ? fromgroups = #! msg/django-reversion/s7p3nTemR04/tMTF1ZuOjmEJ) rzuca trochę światła na problem. Gdzie rejestrujesz swoje modele z wersjami? –

+0

Czy możesz spróbować wstawić linie 'przywrócenie importu; reversion.register (Shop) 'na dole pliku' models.py', gdzie definiujesz 'Shop' i czy to rozwiązuje problem? –

+0

@DavidRobinson: Już tam jest, na samym dole. Wersje są zapisywane tylko w widokach. –

Odpowiedz

21

Napisałem django-reversion, więc myślę, że mogę rzucić nieco światła na tę kwestię.

wersja modelu jest automatycznie zapisywany, gdy model jest zapisywany, zapewniając spełnione są następujące warunki:

  1. Model jest zarejestrowana Django zmiany kierunku obrotów.
  2. Blok kodu jest oznaczony jako będący w wersji.

Punkt 1 można osiągnąć albo rejestracji model z VersionAdmin lub jawne wywołanie reversion.register() w pliku models.py.

Punkt 2 można uzyskać za pomocą RevisionMiddleware lub dekoratora reversion.create_revision() lub menedżera kontekstów. Wszystkie widoki admina w VersionAdmin również zapisują wersję.

Jeśli więc twoja powłoka nie tworzy Wersji, to albo punkt 1, albo punkt 2 nie jest spełniony. Oto, jak to naprawić:

  1. Jeśli używasz programu VersionAdmin, zaimportuj odpowiedni moduł administratora w swoim kodzie powłoki, aby uruchomić automatyczną rejestrację. Ewentualnie zadzwoń pod numer reversion.register() w swoim pliku models.py.
  2. W kodzie powłoki, używając menedżera kontekstu reversion.create_revision() wokół połączenia, aby zapisać.
with reversion.create_revision(): 
    s.save() 

Więcej informacji na temat tego typu rzeczy na stronie wiki API niskiego poziomu:

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

+0

To ma sens i skorzystałem z https: // github.com/etianen/django-reversion/wiki/Strona wiki o niskim poziomie interfejsu .... która mówi, co najlepiej jest zapewnić, aby model save() zawsze tworzył wersję? sygnały? zapisać() zastąpić? –

+0

Świetna wskazówka (nr 2). Sugeruję, że jest to dodane do instrukcji instalacji django-reversion, ponieważ miałem go wyłączony i nie zauważyłem tego, dopóki nie znalazłem tego posta ... – Davy

Powiązane problemy