1

次のyamlコードでいくつかのDjangoモデルを初期化しようとしています:

- model: app.block &block_1
  pk: 1

- model: app.vertex
  fields:
    x: 804837.500000
    y: 7508312.500000
    z: 326.000000
    block: *block_1

- model: app.vertex
  fields:
    x: 804837.500000
    y: 7508312.500000
    z: 334.000000
    block: *block_1

- model: app.vertex
  fields:
    x: 804837.500000
    y: 7508362.500000
    z: 326.000000
    block: *block_1

ただし、「python manage.py loaddata ./data.yaml」を呼び出してデータベースにデータを入力すると、次のようなエラーメッセージが表示されます。

alizers/pyyaml.py", line 62, in Deserializer
    raise DeserializationError(e)
DeserializationError: found undefined alias 'block_1'
  in "./data/initial.yaml", line 9, column 12

何らかの理由で、アンカーblock_1が認識されません。アンカーが適切に配置されている方法はありますか?yamlフォーマットに他に何か問題がありますか?

乾杯、マックス

更新:構文がどのようになっているのかを理解するために、Djangoからデータをエクスポートしようとしました。私はこの結果を得ました:

$ python manage.py dumpdata app --format=yaml
- fields: {block: 1, x: 1.0, y: 2.0, z: 3.0}
  model: app.vertex
  pk: 1
- fields: {block: 2, x: 4.0, y: 5.0, z: 6.0}
  model: app.vertex
  pk: 2
- fields: {}
  model: app.block
  pk: 1
- fields: {}
  model: app.block
  pk: 2
- fields: {}
  model: app.block
  pk: 3

これはかなり役に立たない。エクスポートは、実際に存在する参照をキャプチャしていないようです(管理インターフェースを介してチェックされます)。

また、オンラインパーサーをもう一度使用しました。パーサーを通過する間、Djangoは例外を発生させます。

- block:  &block_1
    model:   app.block
    pk: 1


- vertex:
    model:   app.vertex
    fields:
      x:     804837.500000
      y:     7508312.500000
      z:     326.000000
      block: *block_1

原因

File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/management/commands/loaddata.py", line 190, in handle
    for obj in objects:
  File "/Library/Python/2.7/site-packages/Django-1.4.1-py2.7.egg/django/core/serializers/pyyaml.py", line 62, in Deserializer
    raise DeserializationError(e)
DeserializationError: 'model'
4

1 に答える 1

0

「*block_1」のアスタリスクは必要ですか?私は YAML の専門家ではないことに注意してください。http: //yaml-online-parser.appspot.com/http://instantyaml.appspot.com/であなたのデータを見て削除しました。じゃあ参考?

于 2012-09-13T13:48:41.067 に答える