Tastypie外键关系'dict'对象没有属性'obj'

时间:2013-10-02 10:00:44

标签: python django tastypie

我遇到了tastypie的问题,我找不到导致它的原因。类似问题没有答案:Tastypie foreign key relationship throwing error

资源:

class VoteResource(ModelResource):
    choice = fields.ToOneField(ChoiceResource, 'choice', full=True)
    user = fields.ToOneField(UserResource, 'user')

    class Meta:
        queryset = Vote.objects.all()
        resource_name = 'vote'
        '''...'''
        always_return_data = True
        filtering = {
            'id': ALL,
            'user': ALL_WITH_RELATIONS,
            'choice': ALL_WITH_RELATIONS
        }

    def hydrate(self, bundle):    
        bundle.obj.user = bundle.request.user
        return bundle

请求创建对象的有效负载:

{
  "choice": "/api/v1/choice/210/"
}

(用户通过水合物自动添加)。在full_hydrate内的ressources.py中抛出异常。根据django控制台,我的对象正在正确加载。

造成这种情况的tastypie中的行是

setattr(bundle.obj, field_object.attribute, value.obj) # value obj is the evil one

Tastypie sourcecode here

让我感到害怕的是,它在2天前发挥作用。我添加了1个其他资源而没有触及选择,用户或任何其他与模型相关的资源。我查看了最近的提交历史记录,资源未被触及。

1 个答案:

答案 0 :(得分:1)

通过tastypie源调试我的方式并解决了我的问题。

看起来tastypie首先在相关对象上调用脱水。由于误解,我在choice的脱水中返回了包的数据而不是实际的包本身。

当tastypie脱水choice时,它显然没有得到一个束对象,因此没有obj