django tastypie仅获取特定对象的特定字段

时间:2012-02-29 08:34:25

标签: django json tastypie

在tastypie我的网址:/ api / v1 / course / 1 /?format = json给出以下json:

{
created_on: "2012-02-27T08:00:54",
description: "this is course 1",
id: "1",
resource_uri: "/api/v1/course/1/",
subjects: [
    "/api/v1/subject/1/",
    "/api/v1/subject/2/"
],
title: "Course 1"
}

我想做类似的事情:

/api/v1/course/1/subjects/?format=json   

仅获取特定课程的科目列表。这可能吗?

3 个答案:

答案 0 :(得分:5)

我猜你想做this这样的事情,你指定一个fields参数,这样用户只能请求他们想要的字段。在您的情况下,用户将发送请求

/api/v1/course/1/?format=json&fields=subjects 

实现此目的的一种方法是扩展Tastypie以提供此功能。目前,full_dehydrate方法遍历所有字段并对每个字段进行脱水。您可以添加一个检查以查看用户是否输入了fields,如果是,则只需跳过未指定的任何字段的脱水阶段。

答案 1 :(得分:0)

默认情况下,tastypie不会创建反向关系,但它看起来很简单:

http://django-tastypie.readthedocs.org/en/latest/resources.html#reverse-relationships

class CourseResource(ModelResource):
    subjects = fields.ToManyField('myapp.api.resources.SubjectResource', 'subjects', full=True)
    class Meta:
        queryset = Course.objects.all()

class SubjectResource(ModelResource):
    course = fields.ToOneField(CourseResource, 'courses')

    class Meta:
        queryset = Subject.objects.all()

答案 2 :(得分:0)

我有同样的问题。 然后我实现了一个名为django-tastypie-specific-fields的非常简单的django-tastypie扩展,它将帮助您选择您感兴趣的字段。您将能够通过这样一个简单的请求获取数据

/api/v1/course/1/?format=json&fields=subjects

它还将为您提供更多可能性。