我正在尝试使用 Django TastyPie 来更新我的模型。我有一个身份模型,充当默认 Django 用户模型的包装器:
class Identity(ProfileBase):
user = models.OneToOneField(User, related_name='identity')
avatar = models.ImageField(upload_to=avatar_upload_path, blank=True,
null=True)
我有我的UserResource
:
class UserResource(ModelResource):
class Meta:
resource_name = 'user'
queryset = User.objects.all()
fields = ['email', 'first_name', 'last_name']
include_resource_uri = False
我有我的IdentityResource
:
class IdentityResource(ModelResource):
user = fields.ToOneField(UserResource, 'user', full=True)
class Meta:
resource_name = 'identity'
queryset = Identity.objects.select_related()
fields = ['user', 'avatar']
always_return_data = True
include_resource_uri = False
authentication = OAuthTokenAuthentication()
authorization = Authorization()
我目前正在使用 ModelResourceobj_update
方法成功更新 first_name、last_name IdentityResource
:
def obj_update(self, bundle, request, **kwargs):
print 'updating object'
bundle = self.full_hydrate(bundle)
bundle.obj.user = request.user
user = bundle.data['user']
bundle.obj.user.first_name = user['first_name']
bundle.obj.user.last_name = user['last_name']
return super(IdentityResource, self).obj_update(bundle, request, user=request.user)
我想提出一个PUT
请求,并可选择更新用户或身份模型上的任何字段(用户上的名字、姓氏或身份上的头像字段)。我宁愿不必手动访问捆绑数据中的每个字段并手动将它们设置在模型上,就像我在上面所做的那样。
我怎样才能在 TastyPie 中自然地做到这一点?有人可以解释解决这个问题的更好方法吗?任何方向都非常感谢。:)