防止tastypie更新foreignkey字段

时间:2013-06-03 02:41:54

标签: django tastypie

我有像

这样的tastypie资源
class MembershipResource(ModelResource):
    user = fields.ForeignKey(UserResource, 'user')    
    activity = fields.ForeignKey(ActivityResource, 'activity')
    class Meta:
        authorization=Authorization()
        authentication=ApiKeyAuthentication()

现在,当我使用数据

发布此资源时,此功能非常有效
{
 user: "/api/v1/user/username/",
 activity: "/api/v1/activity/2/"
}

但是,如果我使用username,id等传递完整的用户数据,TastyPie会更新auth_user并更改身份验证详细信息(我无法登录用户,直到我在django shell中重置密码)

是否有一种简单的方法可以使 fields.ForeignKey(ForeignResource)阻止更新 ForeignResource

修改

我可以通过使用特定领域的水合物来实现。例如:

def hydrate_user(self, bundle):
   user = UserNameResource()
   userbundle = user.build_bundle(data=bundle.data['user'], request=bundle.request)
   userobj = user.full_hydrate(userbundle).obj        
   bundle.data['user'] = userobj                
   return bundle

甚至使用名为user_id的伪字段。但是,我认为这是一个非常常见的问题,必须通过field.ForeignKey中的选项以更简单的方式来做到这一点。

1 个答案:

答案 0 :(得分:0)

如果您确定不想更新用户字段,可以在字段中使用readonly param。

user = fields.ForeignKey(UserResource, 'user', readonly=True)