2009-12-07 14 views
6

मुझे डमी प्रविष्टियों (लगभग 200+) के समूह के साथ अपने डेटाबेस को पॉप्युलेट करने की आवश्यकता है ताकि मैं अपने द्वारा बनाए गए व्यवस्थापक इंटरफ़ेस का परीक्षण कर सकूं और मैं सोच रहा था कि कोई बेहतर तरीका है या नहीं इसे करने के लिए। मैंने कल अपने दिन का बेहतर हिस्सा हाथ से भरने की कोशिश की (यानी इस माय_मोडेल (शीर्षक = "asdfasdf", field2 = "laksdj" ...) के गुच्छा में "x में रेंज के लिए" 0,200): "loops) और छोड़ दिया क्योंकि यह जिस तरह से मैं उम्मीद करता था काम नहीं किया। मुझे लगता है कि this मुझे उपयोग करने की आवश्यकता है, लेकिन क्या आपको इस काम के लिए डेटाबेस में मौजूदा (मौजूदा) डेटा रखने की आवश्यकता नहीं है?Django - परीक्षण उद्देश्यों के लिए डेटाबेस को पॉप्युलेट करना

+0

आप क्रमबद्ध नहीं करना चाहते हैं। आप शेल में चलकर प्रारंभिक डेटा बनाना चाहते हैं, उदाहरणों को सहेज सकते हैं, और उसके बाद डेटाबेस को लोड करने के लिए जेएसएन जैसे प्रारूप में एक स्थिरता में निर्यात करना चाहते हैं: 'python manage.py dumpdata --format = json --indent = 4 appname' @ मैथ्यू शिनकेल इस पर सबसे नज़दीक है। – hughdbrown

उत्तर

7

चेक इस एप्लिकेशन

https://github.com/aerosol/django-dilla/

मान लीजिए कि आप अपने ब्लॉग आवेदन लिखा करते हैं (ओह, हाँ, अपने पसंदीदा!) Django में। यूनिट परीक्षण ठीक हो गए, और सबकुछ बेहद तेज़ चलता है, यहां तक ​​कि उन ओआरएम से उत्पन्न अति-लंबे प्रश्न भी। आपने कई वर्गीकृत पोस्ट जोड़े हैं और यह अभी भी एक चट्टान के रूप में स्थिर है। आप पूरी तरह से सुनिश्चित हैं कि ऐप कुशल है और लाइव तैनाती के लिए तैयार है। सही? गलत।

+0

यह वही चीज़ है जो मैं ढूंढ रहा था। बहुत बहुत धन्यवाद! – cornjuliox

+0

@Eeyore: आपका जवाब मुझे सोने नहीं देगा। – misterte

4

आप इस उद्देश्य के लिए फिक्स्चर का उपयोग कर सकते हैं, और loaddata प्रबंधन आदेश।

एक दृष्टिकोण यह ऐसा करना है।

  1. अपना परीक्षण डेटाबेस तैयार करें।

  2. डेटाबेस के JSON निर्यात को बनाने के लिए डंपडाटा का उपयोग करें।

  3. इसे अपने आवेदन की fixtures निर्देशिका में रखें।

  4. इस "स्थिरता" को लोड करने के लिए अपने यूनिट परीक्षण लिखें।

+0

मुझे बस कुछ विवरण जोड़ना पड़ा। –

0

मुझे यकीन नहीं है कि आपको किसी भी क्रमिकरण की आवश्यकता क्यों है। जब तक आप अपने परीक्षण डेटाबेस को इंगित करने के लिए अपनी Django settings.py फ़ाइल सेट अप करते हैं, तब तक परीक्षण डेटाबेस को पॉप्युलेट करना मॉडल को सहेजने से ज्यादा कुछ नहीं होना चाहिए।

for x in range(0, 200): 
    m = my_model(title=random_title(), field2=random_string(), ...) 
    m.save() 

ऐसा करने के बेहतर तरीके हैं, लेकिन यदि आप त्वरित परीक्षण सेट चाहते हैं, तो यह तरीका है।

+0

और आप खोल के संदर्भ में चल रहे हैं, है ना? 'python manage.py shell' – hughdbrown

3

Django fixturessyncdb पर डेटा आयात करने के लिए एक तंत्र प्रदान करता है। हालांकि, यह प्रारंभिक डेटा प्रचार करना पाइथन कोड के माध्यम से अक्सर आसान होता है। आपके द्वारा रूपरेखा की जाने वाली तकनीक को सिंकडीबी या प्रबंधन कमांड के माध्यम से काम करना चाहिए। उदाहरण के तौर पर syncdb के माध्यम से, my_app/management.py में:

def init_data(sender, **kwargs): 
    for i in range(1000): 
     MyModel(number=i).save() 

signals.post_syncdb.connect(init_data) 

या, एक management commandmyapp/management/commands/my_command.py में:

from django.core.management.base import BaseCommand, CommandError 

from models import MyModel 

class MyCommand(BaseCommand): 
    def handle(self, *args, **options): 
     if len(args) > 0: 
      raise CommandError('need exactly zero arguments') 

     for i in range(1000): 
      MyModel(number=i).save() 

फिर आप एक दृढ़ करने के लिए इस डेटा निर्यात कर सकते हैं, या प्रबंधन आदेश का उपयोग कर आयात करना जारी। यदि आप syncdb सिग्नल का उपयोग करना जारी रखना चुनते हैं, तो आप कॉल पर डेटा आयात करने से रोकने के लिए सशर्त रूप से init_data फ़ंक्शन चला सकते हैं। जब एक स्थिरता पर्याप्त नहीं होती है, तो मैं व्यक्तिगत रूप से दोनों करना चाहता हूं: डेटा आयात करने के लिए प्रबंधन कमांड बनाएं, लेकिन पहले syncdb आमंत्रण स्वचालित रूप से आयात करें। इस तरह, तैनाती अधिक स्वचालित है लेकिन मैं अभी भी प्रारंभिक डेटा में आसानी से संशोधन कर सकता हूं और आयात को फिर से चला सकता हूं।

0

एप्लिकेशन स्वीकार किए जाते हैं जवाब द्वारा सिफारिश नहीं रह गया है बनाए रखा जा रहा है लेकिन django-बीज एक स्थानापन्न के रूप उपयोग किया जा सकता है:

https://github.com/brobin/django-seed

0

मैं तुम्हारे पास django-autofixtures की सिफारिश करेंगे। मैंने django_seed और django-autofixtures दोनों की कोशिश की, लेकिन django_seed में अद्वितीय कुंजी के साथ बहुत सारे मुद्दे हैं। django-autofixtures डेटाबेस को भरते समय अद्वितीय, प्राथमिक और अन्य डीबी बाधाओं का ख्याल रखता है

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