私は、Django TastyPie を使用してモデルを更新しようとしています。デフォルトの Django ユーザー モデルのラッパーとして機能する Identity モデルがあります。
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
必要に応じてユーザー モデルまたは ID モデル (ユーザーの first_name、last_name、または ID のアバター フィールド) のフィールドを更新したいと考えています。上記のように、バンドル データから各フィールドに手動でアクセスしてモデルに手動で設定する必要はありません。
TastyPieでこれを自然に行うにはどうすればよいですか? 誰かがこの問題を解決するためのより良いアプローチを説明できますか? どんな方向でも大歓迎です。:)