1

我有一个美味的资源,比如

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/"
}

但是,如果我使用用户名、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 中的一个选项来做到这一点。

4

1 回答 1

0

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

user = fields.ForeignKey(UserResource, 'user', readonly=True)
于 2013-06-04T04:39:29.457 回答