美味派api没有在json结果中显示ForeignKey

Posted

技术标签:

【中文标题】美味派api没有在json结果中显示ForeignKey【英文标题】:tastypie api not showing ForeignKey in json result 【发布时间】:2011-10-18 23:52:18 【问题描述】:

我最近开始使用 sweetpie 为潜在的智能手机应用程序打开我的 api。

我正在使用 python-2.7 和 Django-1.1.2

有两件事让我很困惑

1:在EntryResource 类中调用ForeignKey 时,他们只是调用资源以及resource_name,当我这样做时,我得到以下回溯。

691. assert isinstance(to, basestring), "%s(%r) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)

Exception Type: AssertionError at /api/v1/activity-stream-item-subject/
Exception Value: ForeignKey(<class 'api.resources.UserResource'>) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string 'self'

2:如果我将EntryResource更改为user = fields.ForeignKey(UserResource, 'user'),那么它运行良好,没有回溯,但是我在JSON响应中看不到相关信息。

api/resources.py

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'
        excludes = ['email', 'password', 'is_active', 'is_staff', 'is_superuser']
        filtering = 
            'username': ALL,
        

class EntryResource(ModelResource):
    user = fields.ForeignKey(UserResource, 'user')

    class Meta:
        queryset = Entry.objects.all()
        resource_name = 'entry'
        authorization = Authorization()
        filtering = 
            'user': ALL_WITH_RELATIONS,
            'pub_date': ['exact', 'lt', 'lte', 'gte', 'gt'],
         

有什么想法吗?

【问题讨论】:

【参考方案1】:

如果你想在json结果中显示User的所有字段,你必须设置full=True

user = fields.ForeignKey(UserResource,user,full=True)

【讨论】:

true 是无效的python【参考方案2】:

我不确定我是否理解您的第一个问题,但关于第二个问题,您需要指定您想要使用的完整资源:

user = fields.ForeignKey(UserResource, 'user',full=True)

否则,您将获得资源 URI 而不是内容。 (Ref)

也仅供参考,请记住需求状态:

Django 1.2+(可能适用于 Django 1.1)

【讨论】:

以上是关于美味派api没有在json结果中显示ForeignKey的主要内容,如果未能解决你的问题,请参考以下文章

美味派的分析

如何检查该用户是不是已通过来自美味派的身份验证?

如何在美味派中强制使用一些过滤器?

使用 Backbone 将文件上传到美味派?

如何通过tastepie上传文件/图像

9.15号到货推荐~cocoaland巧克力派~层次分明~香浓幼滑~口感细腻~回味无穷~舌尖美味难以忘怀~用心触动您的味蕾~