मैंने सफलतापूर्वक अपना पहला django प्रोजेक्ट बनाया है।क्या django grok yML करता है? django फिक्स्चर लोड नहीं कर रहा है YML फ़ाइल (yml एक ज्ञात क्रमिकरण नहीं है)
मेरे पास मेरे प्रोजेक्ट foo और foobar में दो ऐप्स हैं।
मैंने प्रत्येक ऐप फ़ोल्डर्स में 'फिक्स्चर' नामक फ़ोल्डर बनाया है। मैंने अपनी सेटिंग्स.इसीएल में एक फिक्स्चर निर्देशिका निर्दिष्ट नहीं की है, इसलिए (according to the docs), django को मेरे {app}/fixtures फ़ोल्डर में देखना चाहिए।
{app}/fixtures फ़ोल्डर में, मेरे पास कई YML फ़ाइलें हैं। मैंने विभिन्न मॉड्यूल के लिए प्रारंभिक डेटा को अलग-अलग वाईएमएल फाइलों में विभाजित कर दिया है, यह सुनिश्चित कर लें कि कोई क्रॉस फ़ाइल निर्भरता नहीं है (यानी सभी संबंधित मॉडल एक ही वाईएमएल फ़ाइल में हैं और पूर्वजों को उन मॉडलों से पहले फ़ाइल में होता है)।
नहीं जुड़नार पाया
मैं तो मैन्युअल जुड़नार लोड करने का प्रयास:
हालांकि, जब मैं syncdb run./manage.py के बाद डाटाबेस वस्तुओं सफलतापूर्वक निर्मित किए गए, वहाँ निम्न संदेश था
./manage.py loaddata 0100_foobar.yml
Problem installing fixture '0100_foobar': yml is not a known serialization
प्रलेखन गलत ऊपर के लिंक में दी गई है ?, या मैं Django YML grok सकें, इसके लिए एक मॉड्यूल स्थापित करने की आवश्यकता है: loaddata कमांड का उपयोग करके?
Btw, YML फ़ाइलों को सही ढंग से पार्स और (मैं उन्हें एक अन्य परियोजना में सफलतापूर्वक इस्तेमाल किया) शुद्धता के लिए जाँच की गई है - ताकि समस्या नहीं है
[संपादित करें]
मैं PyYaml स्थापित किया है और मनोज के निर्देशों के अनुसार मेरी फिक्स्चर फाइलों का नाम बदल दिया। मैं लाइन को थोड़ा और नीचे पाने में सक्षम हूं, लेकिन मुझे अभी भी समस्याएं आ रही हैं (बीटीडब्लू, मैं पाययामल 3.0.9 का उपयोग कर रहा हूं)।
class Currency(models.Model):
short_name = models.CharField(max_length=3, db_index=True, unique=True, null=False) # ISO Code
long_name = models.CharField(max_length=64, db_index=True, unique=True, null=False)
spot_settle = models.IntegerField(null=False, default=0)
rounding = models.IntegerField(null=False, default=2)
यहाँ YAML फ़ाइल मैं आयात करने हूं:
यहाँ मेरी परियोजना ORM (यानी {एप्लिकेशन} /model.py) में मॉडल है
Currency:
currency_aud : { short_name: AUD , long_name: Australia - Dollars , spot_settle: 0, rounding: 2 }
currency_cad : { short_name: CAD , long_name: Canada - Dollars , spot_settle: 0, rounding: 2 }
currency_eur : { short_name: EUR , long_name: Euro Member Countries - Euro , spot_settle: 0, rounding: 2 }
currency_gbp : { short_name: GBP , long_name: United Kingdom - Pounds , spot_settle: 0, rounding: 2 }
currency_jpy : { short_name: JPY , long_name: Japan - Yen , spot_settle: 0, rounding: 2 }
currency_usd : { short_name: USD , long_name: United States Of America - Dollars , spot_settle: 0, rounding: 2 }
currency_zar : { short_name: ZAR , long_name: South Africa - Rand, spot_settle: 0, rounding: 2 }
currency_hkd : { short_name: HKD , long_name: Hong Kong Dollar, spot_settle: 0, rounding: 2 }
currency_nzd : { short_name: NZD , long_name: New Zealand Dollar, spot_settle: 0, rounding: 2 }
currency_sgd : { short_name: SGD , long_name: Singapore Dollar, spot_settle: 0, rounding: 2 }
currency_dkk : { short_name: DKK , long_name: Danish Krone, spot_settle: 0, rounding: 2 }
currency_sek : { short_name: SEK , long_name: Swedish Krona, spot_settle: 0, rounding: 2 }
currency_chf : { short_name: CHF , long_name: Swiss Franc, spot_settle: 0, rounding: 2 }
यहाँ ढेर है का पता लगाने जब मैं ./manage.py loaddata MyApp/फिक्स्चर/currencies.yaml
[email protected]:~/work/demo/myproj$ ./manage.py loaddata reference/fixtures/0100_currency.yaml
Installing yaml fixture 'reference/fixtures/0100_currency' from absolute path.
Problem installing fixture 'reference/fixtures/0100_currency.yaml': Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/loaddata.py", line 165, in handle
for obj in objects:
File "/usr/local/lib/python2.6/dist-packages/django/core/serializers/pyyaml.py", line 57, in Deserializer
for obj in PythonDeserializer(yaml.load(stream), **options):
File "/usr/local/lib/python2.6/dist-packages/django/core/serializers/python.py", line 84, in Deserializer
Model = _get_model(d["model"])
TypeError: string indices must be integers, not str
मैंने इसे बंद करने के लिए वोट दिया है। उम्मीद है कि अन्य सहमत होंगे और इसे हटा देंगे। –
धन्यवाद मनोज। मैंने सोचा कि मेरे पास जवाब था, लेकिन यह पता चला कि मैं गलत था, इसलिए मैंने फिर से सवाल फिर से सबमिट कर दिया है, मेरे नए निष्कर्षों को प्रतिबिंबित करने के लिए थोड़ा संशोधित – skyeagle
ओह। दुर्भाग्य से मैं अपना वोट वापस नहीं ले सकता। –