リソースを更新しようとすると、このエラーが発生し続けます。
更新しようとしているリソースはメッセージと呼ばれます。アカウントには外部キーがあります。
class AccountResource(ModelResource):
class Meta:
queryset = Account.objects.filter()
resource_name = 'account'
'''
set to put because for some weird reason I can't edit
the other resources with patch if put is not allowed.
'''
allowed_methods = ['put']
fields = ['id']
def dehydrate(self, bundle):
bundle.data['firstname'] = bundle.obj.account.first_name
bundle.data['lastname'] = bundle.obj.account.last_name
return bundle
class MessageResource(ModelResource):
account = fields.ForeignKey(AccountResource, 'account', full=True)
class Meta:
queryset = AccountMessage.objects.filter(isActive=True)
resource_name = 'message'
allowed = ['get', 'put', 'patch', 'post']
authentication = MessageAuthentication()
authorization = MessageAuthorization()
filtering = {
'account' : ALL_WITH_RELATIONS
}
PATCHを使用してメッセージを更新しようとすると、次のエラーが発生します。
渡されたデータ:{"text":"blah!"}
The 'account' field has was given data that was not a URI, not a dictionary-alike and does not have a 'pk' attribute: <Bundle for obj: '<2> [nikunj]' and with data: '{'lastname': u'', 'id': u'2', 'firstname': u'', 'resource_uri': '/api/v1/account/2/'}'>.
悪い解決策::
データ{"text":"blah!", "account":{"pk":2}}
を渡す:アカウントを渡したくありません。テキストだけを編集したいだけです。アカウントも渡す必要があるのはなぜですか?
私は使用しようとしました:
def obj_update(self, bundle, request=None, **kwargs):
return super(ChartResource, self).obj_update(bundle, request, account=Account.objects.get(account=request.user))
しかし、それは動作しません!! ヘルプ!