He creado con éxito mi primer proyecto django.¿Django grok YML? django no carga los archivos YML (yml no es una serialización conocida)
Tengo dos aplicaciones en mi proyecto foo y foobar.
He creado una carpeta llamada 'accesorios' en cada una de las carpetas de la aplicación. NO he especificado un directorio de accesorios en mi settings.yml, así que (according to the docs), django debería buscar en mi carpeta {app}/fixtures.
En la carpeta {app}/fixtures, tengo varios archivos YML. He dividido los datos iniciales de los distintos módulos en archivos YML separados, asegurándome de que no haya dependencias de archivos cruzados (es decir, todos los modelos relacionados están en el mismo archivo YML y los antepasados aparecen en el archivo antes que los modelos que los utilizan).
Sin embargo, cuando run./manage.py syncdb después de que los objetos de base de datos se han creado correctamente, no fue el mensaje siguiente:
No se encontraron accesorios
Luego trató de cargar manualmente los accesorios utilizando el comando loaddata:
./manage.py loaddata 0100_foobar.yml
Problem installing fixture '0100_foobar': yml is not a known serialization
es la documentación que figura en el enlace anterior equivocada ?, o tengo que instalar un módulo con el fin de Django para asimilar YML?
Por cierto, los archivos YML analizar correctamente y se ha verificado su corrección (he usado con éxito en otro proyecto) - por lo que no es el problema
[Editar]
He instalado PyYAML y renombré mis archivos de accesorios según las instrucciones de Manoj. Puedo avanzar un poco más, pero sigo teniendo problemas (por cierto, estoy usando PyYaml 3.0.9).
Aquí es el modelo en mi proyecto ORM (es decir, {app} /model.py):
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)
Aquí está el archivo YAML Estoy importando:
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 }
Aquí está la pila rastrear cuando corro ./manage.py loaddata miaplicacion/accesorios/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
He votado para cerrarlo. Con suerte, otros estarán de acuerdo y lo eliminarán. –
Gracias Manoj. Pensé que tenía la respuesta, pero resulta que estaba equivocado, así que volví a enviar la pregunta, modificada ligeramente para reflejar mis nuevos hallazgos – skyeagle
¡Uy! Desafortunadamente no puedo retirar mi voto. –