2012-07-20 13 views
9

Django dumpdata कमांड टूटा हुआ है क्योंकि यह डेटा डंप किए गए डेटा को कम करने के किसी भी उचित तरीके का समर्थन नहीं करता है। मुझे की आवश्यकता है विभिन्न क्वेरीसेट्स (और मुझे बाहरी मॉडल संबंधों से वस्तुओं को डंप करने की देखभाल करने की आवश्यकता नहीं है) की एक स्थिरता बनाएं। उन क्वेरीसेट्स के लिए आइटम्स की संख्या सीमित करना, जैसे django-test-utils makefixture पर्याप्त नहीं है। कस्टम मैनेजर के साथ प्रॉक्सी मॉडल का उपयोग करके इसे प्राप्त करने का प्रयास किया, लेकिन यह दृष्टिकोण काम नहीं करता है - डंपडाटा ओमिट प्रॉक्सी मॉडल (जो उचित है)।मैं django में QuerySet से कैसे एक स्थिरता बना सकता हूं?

उत्तर

28

यदि dumpdata काम नहीं करता है, तो आप Django Serializing data के माध्यम से ऐसा कर सकते हैं।

from django.core import serializers 
data = serializers.serialize("json", SomeModel.objects.all()) 

और फिर फ़ाइल पर data लिखें।

+2

उत्कृष्ट! आपका बहुत बहुत धन्यवाद! – pielgrzym

-1

मुझे यकीन है कि आप "बाहरी मॉडल संबंधों", हो सकता है एक उदाहरण में मदद मिलेगी क्या मतलब है नहीं कर रहा हूँ, लेकिन आप मॉडल आप में ...

manage.py dumpdata --help 
Usage: ./manage.py dumpdata [options] [appname appname.ModelName ...] 

रुचि रखते हैं DumpData पारित कर सकते हैं और वहाँ को बाहर स्विच:

-e EXCLUDE, --exclude=EXCLUDE 
        An appname or appname.ModelName to exclude (use 
        multiple --exclude to exclude multiple apps/models). 
+0

मेरा मतलब था कि डंपिंग को मॉडल से जुड़े मॉडल से ट्रैक रखने की आवश्यकता नहीं है। – pielgrzym

1

निम्न चरणों के का हल पूरा प्रदान समर्थन कर रही विभिन्न क्वेरीसमूहों की एक दृढ़ बनाने में मदद मिलेगी।

from django.core import serializers 
from django.core.management.commands.dumpdata import sort_dependencies 

app_list = {} 

# Add all your querysets here. The key for the dictionary can be just a 
# unique dummy string (A safe hack after reading django code) 
app_list['app1_name'] = FirstModel.objects.all() 
app_list['app2_name'] = SecondModel.objects.all() 

# The sort_dependencies will ensure that the models are sorted so that 
# those with foreign keys are taken care. If SecondModel has a fk to FirstModel, 
# then sort_dependencies will take care of the ordering in the json file so that 
# FirstModel comes first in the fixture thus preventing ambiguity when reloading 
data = serializers.serialize("json", sort_dependencies(app_list.items())) 
f = open('output.json', 'w') 
f.write(data) 
f.close() 

अब आउटपुट output.json फ़ाइल में उपलब्ध होगा। json फ़ाइल से मॉडल के पुनर्निर्माण के लिए:

from django.core import serializers 

for obj in serializers.deserialize('json', open('output.json').read()): 
    obj.save() 

संपादित: अजीब, sort_dependencies अपेक्षा के अनुरूप काम नहीं किया। तो मैं अजगर आदेश दिया गया आदेश का उपयोग कर समाप्त हो गया और आदेश खुद का फैसला किया।

import collections 

app_list = collections.OrderedDict()