【问题标题】:django tastypie only fetch a particular field of a particular objectdjango sweetpie 只获取特定对象的特定字段
【发布时间】:2012-03-18 17:51:15
【问题描述】:

在 sweetpie 我的网址:/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   

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

【问题讨论】:

  • 因为 json 服务不需要 SEO,我不明白这一点。或者您可能想要所有与您的课程相关的科目。
  • 是的,我只是想知道在更复杂的嵌套 json 中是否可以只查询我想要的实体。如果可能的话,我只想要主题。实际上这个 json 太大了,我在想是否有办法在不编写新资源的情况下做到这一点。

标签: django json tastypie


【解决方案1】:

tastepie 中默认不会创建反向关系,但看起来很简单:

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()

【讨论】:

  • 不,根据问题中发布的 json,我已经做了完全相同的事情,它在课程 json 中显示主题。我想知道我是否只能获得主题,还是我的问题没有意义?谢谢。
  • 我添加了 full=True,它不再是链接而是完整的对象...这是您想要的吗?我正在和你一起发现美味派来回答所以请放纵^^。
  • 你仍然可以做 2 门课程资源来拥有一个只有主题的课程资源我们有一个带有自定义查询过滤器的主题资源django-tastypie.readthedocs.org/en/latest/…
【解决方案2】:

我猜你想做this 之类的事情,你可以在其中指定fields 参数,这样用户就可以只请求他们想要的字段。在您的情况下,用户会发送请求

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

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

【讨论】:

【解决方案3】:

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

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

它也会给你更多的可能性。

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 2020-07-23
    • 1970-01-01
    • 2022-06-30
    • 2018-02-26
    • 1970-01-01
    • 2016-07-24
    • 2014-06-23
    • 2016-12-09
    相关资源
    最近更新 更多