Obv*_*Cat 0 python django tastypie
由于我的模型的自定义保存方法将request.user作为参数,我无法执行POST/PUT请求.
TypeError at /api/obsadmin/observation/23
save() takes at least 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
我正在使用SessionAuthentication()并包含CSRF令牌.
这是相关的模型部分:
def save(self, user, owner=None, *args, **kwargs):
self.updated_by = user.id
super(ObsModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
和资源:
class ObservationResource2(ModelResource):
comments = fields.ToManyField(CommentResource2, 'comments', full=True, null=True)
class Meta:
queryset = Observation.objects.filter(is_verified=True)
authentication = SessionAuthentication()
authorization = DjangoAuthorization()
resource_name = 'observation'
always_return_data = True
Run Code Online (Sandbox Code Playgroud)
我刚刚通过使用内置hydrate方法在保存之前修改数据实现了同样的最终目标.当前请求bundle.request在hydrate方法内部可用.请参阅此处的文档.
我有一个Friend模型暴露通过FriendResource我想链接到通过userForeignKey字段创建Django用户.
我的示例资源代码:
class FriendResource(ModelResource):
class Meta:
queryset = Friend.objects.all()
resource_name = 'friend'
excludes = ['slug',]
authentication = SessionAuthentication()
authorization = DjangoAuthorization()
always_return_data = True
def get_object_list(self, request):
return super(FriendResource, self).get_object_list(request).filter(user=request.user)
def hydrate(self, bundle):
bundle.obj.user = bundle.request.user
return bundle
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!