2

Tastypie API に対して POST リクエストを実行すると、次のエラーが発生します。

{"error_message": "", "traceback": "Traceback (most recent call last):\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 195, in wrapper\n response = callback(request, *args, **kwargs)\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 407, in dispatch_list\n return self.dispatch('list', request, **kwargs)\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 436, in dispatch\n response = method(request, **kwargs)\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 1194, in post_list\n updated_bundle = self.obj_create(bundle, request=request, **self.remove_api_resource_names(kwargs))\n\n File \"/home/kelp/webapps/goals/goals/main/api.py\", line 191, in obj_create\n bundle = super(JoinedGoalResource, self).obj_create(bundle, request, user=request.user)\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 1839, in obj_create\n bundle = self.full_hydrate(bundle)\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/resources.py\", line 716, in full_hydrate\n value = field_object.hydrate(bundle)\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/fields.py\", line 643, in hydrate\n value = super(ToOneField, self).hydrate(bundle)\n\n File \"/home/kelp/lib/python2.7/django_tastypie-0.9.11-py2.7.egg/tastypie/fields.py\", line 152, in hydrate\n elif self.attribute and getattr(bundle.obj, self.attribute, None):\n\n File \"/home/kelp/webapps/goals/lib/python2.7/django/db/models/fields/related.py\", line 301, in __get__\n raise self.field.rel.to.DoesNotExist\n\nDoesNotExist\n"}

このエラーをどのように理解すればよいですか?

4

1 に答える 1

3

django のトレースバックを理解する最善の方法は、一番下から始めて、自分のコードにたどり着くまで上に移動することです。一般的に、django はかなり安定しており、通常、問題はあなたがしていることです:

ファイル \"/home/kelp/webapps/goals/goals/main/api.py\"、191 行目、obj_create 内\n bundle = super(JoinedGoalResource, self).obj_create(bundle, request, user=request.user)

ほとんどの場合、作成に参照を渡し、オブジェクトの外部キー関係を解決しようとしていますが、これは問題です。

あなたが投稿したものからはわかりませんが、トレースバックの最後のエントリを見て、それがどのオブジェクトを見ていて、どのリレーションにアクセスしていて存在しないかを確認できます。ヒントは、バンドル オブジェクトと不適切なフィールドに関係があるということです。

于 2012-08-05T06:07:06.917 に答える