tastypie api在json结果中没有显示ForeignKey

时间:2011-08-03 10:23:50

标签: python django json api

我最近开始使用tastypie为潜在的智能手机应用打开我的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'],
        } 

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

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

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

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

另外仅供参考,请记住要求状态:

  

Django 1.2+(可以使用Django 1.1)

答案 1 :(得分:-2)

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

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