我有以下型号
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
答案 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/