2012-02-29 64 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 

還將給你更多的可能性。