2016-09-22 17 views
0

をスローしますmodels.pytastypieは、私は私のtastypieリソースへの外部キーを追加しようとしていますが、Djangoはこのエラーをスローする例外

class AA(models.Model): 
    n = models.IntegerField() 


class BB(models.Model): 
    aa = models.ForeignKey(AA, related_name='xox') 
    t = models.CharField(max_length=2) 

resources.py

$ curl -XPOST --dump-header - --header 'Content-Type: application/json' localhost:8000/api/v1/a/ --data '{"n": 18}' 
$ curl -XPOST --dump-header - --header 'Content-Type: application/json' localhost:8000/api/v1/bb/ --data '{"t": "di", "aa": "/api/v1/a/1/"}' 

トレースバック:

{ 
    "error_message": "'BB' object is not iterable", 
    "traceback": "Traceback (most recent call last):\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/tastypie/resources.py\", line 219, in wrapper\n response = callback(request, *args, **kwargs)\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/tastypie/resources.py\", line 450, in dispatch_list\n return self.dispatch('list', request, **kwargs)\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/tastypie/resources.py\", line 482, in dispatch\n response = method(request, **kwargs)\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/tastypie/resources.py\", line 1384, in post_list\n updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/tastypie/resources.py\", line 2175, in obj_create\n return self.save(bundle)\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/tastypie/resources.py\", line 2322, in save\n self.save_related(bundle)\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/tastypie/resources.py\", line 2382, in save_related\n setattr(related_obj, field_object.related_name, bundle.obj)\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py\", line 481, in __set__\n manager.set(value)\n\n File \"/home/mee/.venvs/env_pro/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py\", line 639, in set\n objs = tuple(objs)\n\nTypeError: 'BB' object is not iterable\n" 
} 

パッケージのバージョン:

Django==1.9.7 
django-tastypie==0.13.3 
今ポストのアクションを実行するために、カール使用して
from ..models import AA, BB 

from tastypie.authorization import Authorization 
from tastypie.fields import ForeignKey 


class AResource(ModelResource): 
    class Meta: 
     queryset = AA.objects.all() 
     authorization = Authorization() 


class BBResource(ModelResource): 
    aa = ForeignKey(AResource, 'aa', related_name="xox", full=False, blank=True, null=True) 
    class Meta: 
     queryset = BB.objects.all() 
     authorization = Authorization() 

Iは関連が

$ curl localhost:8000/api/v1/bb/ 
{ 
"meta": { 
    "limit": 20, 
    "next": null, 
    "offset": 0, 
    "previous": null, 
    "total_count": 1 
}, 
"objects": [ 
    { 
     "aa": "/api/v1/a/1/", 
     "id": 1, 
     "resource_uri": "/api/v1/bb/1/", 
     "t": "di" 
    } 
] 

に格納されており、トレースバックを検査することによって、エラーがDjangoのコードに上昇さ見ることができるBBオブジェクトを照会することによってEDIT

ご意見をお寄せください。前もって感謝します。

答えて

0

私はデジャヴュのような気分にさせるシンプルな(初心者の)質問でした。ここでの問題は、related_nameをいつ使用するかを覚えておくことです。この場合、paramは必要ありません。

Link to the docsここで、related_nameパラメータが説明されています。

関連する問題