निम्न नमूना वर्ग के लिए:
from django_extensions.db.fields import UUIDField
def MyClass:
uuid = UUIDField(editable=False, blank=True)
name = models.CharField()
आप दक्षिण उपयोग कर रहे हैं, एक डेटा प्रवास बनाएँ:
python ./manage.py datamigration <appname> --auto
और फिर विशिष्ट तर्क के साथ माइग्रेशन अद्यतन करने के लिए निम्नलिखित कोड का उपयोग एक यूयूआईडी जोड़ने के लिए:
from django_extensions.utils import uuid
def forwards(self, orm):
for item in orm['mypp.myclass'].objects.all():
if not item.uuid:
item.uuid = uuid.uuid4() #creates a random GUID
item.save()
def backwards(self, orm):
for item in orm['mypp.myclass'].objects.all():
if item.uuid:
item.uuid = None
item.save()
आप विभिन्न प्रकार के यूयूआईडी बना सकते हैं, प्रत्येक उत्पन्न भिन्न ntly। uuid.py module in Django-extensions UUIDs आप बना सकते हैं, की पूरी सूची है।
यह है कि यदि आप वस्तुओं की एक बहुत कुछ के साथ एक वातावरण में इस माइग्रेशन चला है, यह (उदाहरण के लिए, कपड़े का उपयोग कर यदि तैनात करने के लिए) टाइम आउट की क्षमता है ध्यान देना महत्वपूर्ण है। उत्पादन वातावरण के लिए पहले से ही मौजूदा क्षेत्रों में भरने की एक वैकल्पिक विधि की आवश्यकता होगी।
बड़ी संख्या में वस्तुओं को करने की कोशिश करते समय स्मृति से बाहर निकलना संभव है (हमने खुद को स्मृति से बाहर चलाया और 17,000+ वस्तुओं के साथ तैनाती विफल रही)।
इसके आसपास जाने के लिए, आप अपने माइग्रेशन में need to create a custom iterator (या जहां इसे वास्तव में उपयोगी है वहां चिपकाएं, और इसे अपने माइग्रेशन में देखें)। यह कुछ इस तरह दिखेगा:
def queryset_iterator(queryset, chunksize=1000):
import gc
pk = 0
last_pk = queryset.order_by('-pk')[0].pk
queryset=queryset.order_by('pk')
if queryset.count() < 1
return []
while pk < last_pk:
for row in queryset.filter(pk__gt=pk)[:chunksize]:
pk = row.pk
yield row
gc.collect()
और फिर आपके माइग्रेशन बदल जाएगा इस तरह देखने के लिए:
class Migration(DataMigration):
def forwards(self, orm):
for item in queryset_iterator(orm['myapp.myclass'].objects.all()):
if not item.uuid:
item.uuid = uuid.uuid1()
item.save()
def backwards(self, orm):
for item in queryset_iterator(orm['myapp.myclass'].objects.all()):
if item.uuid:
item.uuid = None
item.save()
भले ही डाउनवॉटर इसे नहीं देख सकें; मैं इसे वैसे भी कहूंगा: यदि आपने मुझे कम कर दिया है क्योंकि मैंने एक उपहार दिया है और फिर सवाल का जवाब दिया है, तो सलाह दी जानी चाहिए कि मुझे अपनी बक्षीस वापस नहीं मिल सकती है, इसलिए मैं बक्षीस के लिए सवाल का जवाब नहीं दे रहा हूं। मैं इसका जवाब दे रहा हूं क्योंकि मुझे बक्षीस मिलने के कुछ समय बाद, मुझे वैसे भी करना पड़ा, इसलिए मैंने सोचा कि मैं हर किसी के साथ साझा करूंगा कि मैंने यह कैसे किया। –
हाय जॉर्ज, मैंने व्यक्तिगत रूप से उस कारण से नीचे गिरा दिया, लेकिन मैं ढेर करने के लिए नया हूं और नहीं जानता था कि आप अपनी खुद की बक्षीस वापस नहीं ले सकते हैं। मैंने अपना डाउनवोट वापस ले लिया है और आपकी प्रोफ़ाइल देखने के बाद आप देख सकते हैं कि आप एक प्रतिबद्ध, स्मार्ट और उपयोगी सदस्य हैं :) –