我有像
这样的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中的选项以更简单的方式来做到这一点。
答案 0 :(得分:0)
如果您确定不想更新用户字段,可以在字段中使用readonly param。
user = fields.ForeignKey(UserResource, 'user', readonly=True)