Django Tastypie PATCH抛出“'Bundle'对象不可迭代”错误

时间:2012-11-08 23:14:44

标签: django api rest patch tastypie

我正在开发一个API,对于我的一个端点,我希望能够进行部分更新。

这是tastypie资源

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请求来更新Story模型中的字段。

它返回错误:

  

{“error_message”:“'Bundle'对象不可迭代”,“traceback”:“Traceback(最近一次调用最后一次):\ n \ n File \”/ usr / local / lib / python2.7 / dist -packages / tastypie / resources.py \“,第192行,在wrapper \ n response = callback(request,* args,** kwargs)\ n \ n File \”/ usr / local / lib / python2.7 / dist -packages / tastypie / resources.py \“,第406行,在dispatch_detail \ n中返回self.dispatch('detail',request,** kwargs)\ n \ n File \”/ usr / local / lib / python2.7 /dist-packages/tastypie/resources.py \“,第427行,在dispatch \ n response = method(request,** kwargs)\ n \ n File \”/ usr / local / lib / python2.7 / dist- packages / tastypie / resources.py \“,第1332行,在patch_detail \ n self.update_in_place(请求,捆绑,反序列化)\ 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 File \”/ usr / local / lib / python2.7 / dist-packages / tastypie / resources.py \ “,第991行,in_valid \ n errors = self._meta.validation.is _valid(bundle,request)\ n \ n File \“/ 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 \ n \ nNetError: 'Bundle'对象不可迭代\ n“}

我不确定什么是错的,我似乎无法在其他任何地方找到这个错误。

1 个答案:

答案 0 :(得分:4)

听起来你的验证试图用这一行迭代你的外键包:

for one_uri in uris:

这就是"Bundle" object is not iterable的来源。如果要将这些字段作为resource_uris进行迭代,请从这些FK字段中删除full=True


如果要将它们保留为full=True,则需要更新验证以处理这些字段的捆绑包,或者在表单Meta类中使用exclude将其从验证中排除:

class ModelFormValidation:
    ...

    class Meta:
        exclude = (
            authors,
            posts,
            cover_photo            
        )
相关问题