我遇到了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
让我感到害怕的是,它在2天前发挥作用。我添加了1个其他资源而没有触及选择,用户或任何其他与模型相关的资源。我查看了最近的提交历史记录,资源未被触及。
答案 0 :(得分:1)
通过tastypie源调试我的方式并解决了我的问题。
看起来tastypie首先在相关对象上调用脱水。由于误解,我在choice
的脱水中返回了包的数据而不是实际的包本身。
当tastypie脱水choice
时,它显然没有得到一个束对象,因此没有obj
。