【问题标题】:Get user from API call in django tastypie to create an object从 django sweetpie 中的 API 调用获取用户以创建对象
【发布时间】:2014-03-25 20:31:35
【问题描述】:

我有以下型号

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

但是当我使用发布请求和 ApiKeyAuthentication 创建一个新实验时,用户字段仍然是空白的,即使我对用户字段进行了水合。

我正在使用 django-tastypie 0.11

【问题讨论】:

    标签: python django tastypie


    【解决方案1】:

    那是因为 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/

    【讨论】:

    • 我实施了你的提议,但没有奏效。我不在请求中发送用户模型,因为我希望最终用户无权修改该字段。我试图做类似this first tip 的事情,但我认为这不起作用,因为我正在使用 ApiKeyAthentication。
    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2014-07-26
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多