2

djangoとtastypieを使用しているサーバーと、backbone.jsを使用しているクライアントWebベースのアプリがあります。データは正常に読み取ることができますが、外部キーを使用して新しいモデルを追加してから同期しようとすると問題が発生します。

そのため、サーバーと自動的に同期するcollection.createを呼び出すのが最も簡単な方法だと思いました。外部キーのないテーブルでこれを行うと、正常に機能します。しかし、サーバーデータベースに関係があるモデルがある場合、外部キーをどのように指定するのかわかりません。

モデルの外部キーは、元々次の形式で提供されます。/api/v1/porttype/4/

このような文字列を作成しようとすると404エラーが発生し、intだけを送信しようとすると404エラーが発生します。

サーバーが何を期待しているのかよくわかりません。これが構成の問題かどうかはわかりません...今は少し迷っています。これまでのところ、私は次のようなことをしています。

collection.create([ { 'project': '/api/v1/porttype/4/', 'name': 'test' } ]);

projectこの場合、外部キーになります。

編集:サーバーから返されるスタックトレース:

{"error_message": "", "traceback": "Traceback (most recent call last)n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 192, in wrapper\n    response = callback(request, *args, **kwargs)\n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 397, in dispatch_list\n    return self.dispatch('list', request, **kwargs)\n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 427, in dispatch\n    response = method(request, **kwargs)\n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 1165, in post_list\n    updated_bundle = self.obj_create(bundle, request=request, **self.remove_api_resource_names(kwargs))\n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 1774, in obj_create\n    bundle = self.full_hydrate(bundle)\n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 698, in full_hydrate\n    value = field_object.hydrate(bundle)\n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/fields.py\", line 636, in hydrate\n    value = super(ToOneField, self).hydrate(bundle)\n\n  File \"/Library/Python/2.7/site-packages/django_tastypie-0.9.11-py2.7.egg/tastypie/fields.py\", line 154, in hydrate\n    elif self.attribute and getattr(bundle.obj, self.attribute, None)n\n  File \"/Library/Python/2.7/site-packages/Django-1.3.2-py2.7.egg/django/db/models/fields/related.py\", line 301, in __get__\n    raise self.field.rel.to.DoesNotExist\n\nDoesNotExist\n"}

認識されないようです...そして、このdjangoエラーを検索したところ、追加時にnull以外のフィールドを送信しないようですが、確かではありません

ヘルプ!

4

1 に答える 1

0

モデルに外部キーを設定して、JSON ペイロードで送信しないのはなぜですか? 例えば:

次の方法で参照を渡さないでください。

collection.create([ { 'project': '/api/v1/porttype/4/', 'name': 'test'} ]);

代わりに、サーバー側でリクエストを別のパラメーターとして処理するだけです。

バックボーン側では、上記を次のように変更します。

collection.create([ { 'project_id': 4, 'name': 'test'} ]);

project_id はプロジェクト テーブルへのforeign_key参照です

次に、コントローラー コードで、残りを ORM で処理する必要があります。私はそれを読者への演習として残します:-)

于 2013-01-29T04:51:56.420 に答える