4

私はAPIに取り組んでおり、エンドポイントの1つについて、部分的な更新を行えるようにしたいと考えています。

これがおいしいリソースです

class StoryResource(ModelResource):
    authors = fields.ToManyField(SimpleAuthorResource, 'authors', full=True)
    posts = fields.ToManyField(SimplePostResource, 'posts', full=True, blank=True)
    cover_photo = fields.ForeignKey(PhotoResource, 'cover_photo', full=True)
    class Meta:
        queryset = Story.objects.all()
        resource_name = 'story'
        validation = ModelFormValidation(form_class=StoryForm)
        authorization = Authorization()
        allowed_methods = ['get', 'post', 'patch', 'put']
        ordering = ['-created_ts']
    def determine_format(self, request):
        return "application/json"

そして、POSTMANを使用して、ストーリーモデルのフィールドを更新するためのPATCHリクエストを作成しています。

このエラーで戻ります:

{"error_message": "'Bundle'オブジェクトは反復可能ではありません"、 "traceback": "トレースバック(最後の最後の呼び出し):\ n\nファイル\"/usr/local/lib/python2.7/dist-packages/ tastypie / resources.py \ "、行192、ラッパー内\ n response = callback(request、* args、** kwargs)\ n\nファイル\"/usr/local/lib/python2.7/dist-packages/ tastypie / resources.py \ "、406行目、dispatch_detail \ n return self.dispatch('detail'、request、** kwargs)\ n\nファイル\"/usr/local/lib/python2.7/dist- packages / tastypie / resources.py \ "、427行目、ディスパッチ\ n response = method(request、** kwargs)\ n\nファイル\"/usr/local/lib/python2.7/dist-packages/tastypie /resources.py \"、行1332、patch_detail \ n self.update_in_place(request、bundle、deserialized)\ n\nファイル\"/usr / local / lib/python2。7 / dist-packages / tastypie / resources.py \ "、1345行目、update_in_place \ n self.is_valid(original_bundle、request)\ n\nファイル\"/usr/local/lib/python2.7/dist-packages /tastypie/resources.py\"、991行目、is_valid \nエラー=self._meta.validation.is_valid(bundle、request)\ n\nファイル\"/var / www / novella-django / novella / novella / api / validation.py \ "、55行目、is_valid \ n data [field] = self.uri_to_pk(data [field])\ n\nファイル\"/var / www / novella-django / novella / novella / api /validation.py\"、29行目、uri_to_pk \ n for one_uri in uris:\ n \ nTypeError:'Bundle'オブジェクトは反復可能ではありません\n"}in is_valid \ n errors = self._meta.validation.is_valid(bundle、request)\ n \nファイル\"/var/www/novella-django/novella/novella/api/validation.py\"、55行目is_valid \ n data [field] = self.uri_to_pk(data [field])\ n \nファイル\"/var/www/novella-django/novella/novella/api/validation.py\"、29行目、uri_to_pk \ n urisのone_uriの場合:\ n \ nTypeError:'Bundle'オブジェクトは反復可能ではありません\n "}in is_valid \ n errors = self._meta.validation.is_valid(bundle、request)\ n \nファイル\"/var/www/novella-django/novella/novella/api/validation.py\"、55行目is_valid \ n data [field] = self.uri_to_pk(data [field])\ n \nファイル\"/var/www/novella-django/novella/novella/api/validation.py\"、29行目、uri_to_pk \ n urisのone_uriの場合:\ n \ nTypeError:'Bundle'オブジェクトは反復可能ではありません\n "}

何が悪いのかよくわかりませんし、このバグは他のどこにも見つからないようです。

4

1 に答える 1

4

検証では、次の行を使用して外部キーバンドルを反復処理しようとしているようです。

for one_uri in uris:

そこ"Bundle" object is not iterableから来ています。full=Trueこれらのフィールドをresource_urisとして反復処理する場合は、それらのFKフィールドから削除します。


それらをとして保持する場合full=Trueは、検証を更新して、これらのフィールドのバンドルを処理するかexclude、フォームのメタクラスで使用して検証から除外する必要があります。

class ModelFormValidation:
    ...

    class Meta:
        exclude = (
            authors,
            posts,
            cover_photo            
        )
于 2012-11-09T16:03:08.970 に答える