2012-02-29 25 views
5

在tastypie我的网址的特定字段:/ API/V1 /场/ 1 /格式= JSON给出以下JSON:Django的tastypie只取特定对象

{ 
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 

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

+0

作为json服务不需要搜索引擎优化我不明白这一点。或者,也许你想要与你有关的所有科目课程。 – christophe31 2012-02-29 08:58:29

+0

http://django-tastypie.readthedocs.org/en/latest/resources.html#reverse-relationships – christophe31 2012-02-29 09:02:48

+0

是的,我只是想知道如果在一个更复杂的嵌套json中,我可以查询我想要的实体。如果可能,我只想要科目。实际上,这个json太大了,我在想如果有一种方法可以在不编写新资源的情况下做到这一点。 – zubinmehta 2012-02-29 09:16:58

回答

5

我猜你想在其中指定fields参数,这样做类似的东西this用户只能请求他们想要的字段。在你的情况下,用户会发送请求到实施,这是延长Tastypie给你这个功能

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

的一种方式。目前,full_dehydrate方法遍历所有字段并对它们进行脱水。您可以添加一个检查来查看用户是否输入了fields,如果是这样,只需跳过任何未指定字段的脱水阶段。

+1

这里是一个扩展名就是这么做的:https://github.com/dan-klasson/django-tastypie-specified-fields。虽然它还不支持m2m。 – 2013-07-07 15:17:58

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

不,我已经做了这个完全相同的东西,显示课程JSON内的主题,根据问题中发布的JSON。我在想,如果我只能得到这些科目,还是我的问题没有意义?谢谢。 – zubinmehta 2012-02-29 09:18:46

+0

我加了全部=真,它没有更多的链接,但完整的对象......是你想要的吗?我发现tastypie与你回答所以请放纵^^。 – christophe31 2012-02-29 09:41:54

+0

你仍然可以做2课程的资源,只有一个主题我们有一个主题与自定义query_filter的资源http://django-tastypie.readthedocs.org/en/latest/resources.html#advanced-filtering – christophe31 2012-02-29 09:49:53

0

我有同样的问题。 然后我实现了一个非常简单的Django tastypie扩展名为django-tastypie-specific-fields这将帮助你选择你感兴趣的领域。你将能够用这么简单的要求,以获取你的数据

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

还将给你更多的可能性。