2012-09-03 11 views
8

में किए गए संशोधनों को सहेजने नहीं करता मैं initial installation चरणों किया था और प्रारंभिक संशोधन बनाया है, लेकिन फिर जब मैं Django खोल में एक मॉडल बचाने के लिए, नया संशोधन नहीं बनाई गई है:Django प्रत्यावर्तन खोल

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

यह वह जगह है प्रारंभिक संशोधन

जब मैं एक दृश्य से मॉडल अद्यतन करता हूं, तो एक संशोधन सफलतापूर्वक बनाया जाता है।

मुझे क्या याद आ रही है?

models.py फ़ाइल है:

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


import reversion 
reversion.register(Shop) 
<EOF> 

मैं post_save रिसीवर के बीच एक प्रत्यावर्तन विधि देखते हैं, हालांकि यह जब मैं इसे डिबग नहीं बुलाया जाता है।

मेरे पास Django v1.4.1, रिवर्सन v1.6.2 है।

+0

[यह धागा] (https://groups.google.com/forum/ ?ggroups = #! msg/django-reversion/s7p3nTemR04/tMTF1ZuOjmEJ) इस मुद्दे पर कुछ प्रकाश डालता है। आप संशोधन के साथ अपने मॉडल कहां पंजीकृत कर रहे हैं? –

+0

क्या आप लाइनों को 'आयात रिवर्सन' डालने का प्रयास कर सकते हैं; reversion.register (दुकान) ''.py.py' फ़ाइल के नीचे' जहां आप 'Shop' को परिभाषित करते हैं, और देखें कि क्या समस्या हल हो रही है? –

+0

@ डेविड रॉबिन्सन: यह पहले से ही नीचे है, नीचे। और संशोधन केवल विचारों में सहेजे गए हैं। –

उत्तर

21

मैंने django-reversion लिखा, इसलिए मुझे लगता है कि मैं इस मुद्दे पर कुछ प्रकाश डाल सकता हूं। जब एक मॉडल सहेजा जाता है

एक एक मॉडल के संस्करण सहेज लिया जाता है, तो निम्न प्रदान कर रहे हैं सच:

  1. मॉडल Django-प्रत्यावर्तन के साथ पंजीकृत है।
  2. कोड ब्लॉक को एक संशोधन के भीतर चिह्नित किया गया है।

प्वाइंट 1 या तो VersionAdmin के साथ एक मॉडल दर्ज की, या स्पष्ट रूप से अपने models.py फ़ाइल में reversion.register() फोन करके प्राप्त किया जा सकता।

प्वाइंट 2 RevisionMiddleware, या reversion.create_revision() सजावटी या संदर्भ प्रबंधक का उपयोग करके हासिल किया जा सकता है। VersionAdmin में कोई भी व्यवस्थापक दृश्य भी एक संशोधन को बचाता है।

तो, यदि आपका खोल संस्करण बना नहीं रहा है, तो या तो बिंदु 1 या बिंदु 2 को पूरा नहीं किया जा रहा है। यहां इसे ठीक करने का तरीका बताया गया है:

  1. यदि आप VersionAdmin का उपयोग कर रहे हैं, तो ऑटो-पंजीकरण में लातने के लिए अपने शैल कोड में प्रासंगिक व्यवस्थापक मॉड्यूल आयात करें। वैकल्पिक रूप से, अपने models.py फ़ाइल में reversion.register() पर कॉल करें।
  2. अपने शेल कोड में, सहेजने के लिए अपने कॉल के आसपास reversion.create_revision() संदर्भ प्रबंधक का उपयोग कर।
with reversion.create_revision(): 
    s.save() 

निम्न स्तर एपीआई विकि पृष्ठ पर बात की इस तरह के बारे में अधिक:

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

+0

यह समझ में आता है और मैंने https: // github को स्वतंत्रता ली।com/etianen/django-reversion/विकी/लो-लेवल-एपीआई विकी पेज .... ने कहा कि यह सुनिश्चित करने के लिए सबसे अच्छा क्या है कि एक मॉडल सेव() हमेशा एक संस्करण बना रहा है? संकेत? बचाओ() ओवरराइड? –

+0

ग्रेट टिप (# 2)। मेरा सुझाव है कि यह django-reversion के इंस्टॉलेशन निर्देशों में जोड़ा गया है क्योंकि मैंने इसे निष्क्रिय कर दिया था और जब तक मुझे यह पोस्ट नहीं मिला तब तक यह ध्यान नहीं दिया ... – Davy

संबंधित मुद्दे