从django tastypie中的API调用中获取用户以创建对象

时间:2014-03-25 20:31:36

标签: python django tastypie

我有以下型号

from django.contrib.auth.models import User
...
class Experiment(models.Model):
""" Experiment class """
date = models.DateTimeField(auto_now=True, auto_now_add=True)
user = models.ForeignKey(User)

以及以下资源

class UserResource(ModelResource):

    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'
        authorization = DjangoAuthorization()
        excludes = ['id', ]
        allowed_methods = ['get', ]



class ExperimentResource(ModelResource):
    user = fields.ToOneField(UserResource, 'user')

    class Meta:
        queryset = Experiment.objects.all()
        resource_name = 'experiment'
        authentication = ApiKeyAuthentication()
        authorization = DjangoAuthorization()
        excludes = ['id', ]

    def hydrate_user(self, bundle):
        bundle.obj.user = bundle.request.user
        return bundle

但是当我使用post request和ApiKeyAuthentication创建一个新的实验时,即使我给用户字段添加水分,用户字段仍然是空白的。

我正在使用django-tastypie 0.11

1 个答案:

答案 0 :(得分:0)

那是因为bundle.obj.user不是User模型,而是SimpleLazyObject。

尝试替换,

def hydrate_user(self, bundle):
    bundle.obj.user = bundle.request.user
    return bundle

用,

def hydrate_user(self, bundle):
    user = User.objects.get(pk=bundle.request.user.pk)
    bundle.obj.user = user

    return bundle

或者,如果用户并非始终处于请求状态,请确保为用户模型发送有效的resource_uri,例如/api/v1/user/1/