2012-02-29 24 views
5

Trong tastypie url của tôi:?/Api/v1/khóa học định dạng/1/= json cung cấp cho các json sau:django tastypie chỉ lấy một lĩnh vực cụ thể của một đối tượng cụ

{ 
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" 
} 

tôi muốn làm một cái gì đó như :

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

để chỉ nhận danh sách đối tượng cho một khóa học nhất định. Điều này có thể không?

+0

là dịch vụ json không yêu cầu SEO Tôi không hiểu điểm. Hoặc có thể bạn muốn tất cả các môn liên quan đến khóa học của bạn. – christophe31

+0

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

+0

vâng, tôi chỉ tự hỏi nếu trong một json lồng nhau phức tạp hơn, tôi có thể chỉ truy vấn cho thực thể tôi muốn. Tôi chỉ muốn các môn học, nếu có thể. Trong thực tế, json này là quá lớn và tôi đã suy nghĩ nếu có một cách để làm điều này mà không cần viết một nguồn tài nguyên mới. – zubinmehta

Trả lời

5

Tôi đoán bạn muốn làm một cái gì đó giống như this nơi bạn chỉ định một tham số fields nên người dùng chỉ có thể yêu cầu các trường họ muốn. Trong trường hợp của bạn, người dùng sẽ gửi yêu cầu

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

Một cách để thực hiện việc này là mở rộng Tastypie để cung cấp cho bạn chức năng này. Hiện tại, phương thức full_dehydrate lặp lại trên tất cả các trường và khử nước từng trường. Bạn có thể thêm vào một kiểm tra để xem liệu người dùng đã nhập fields và nếu có, chỉ cần bỏ qua giai đoạn khử nước cho bất kỳ trường nào không được chỉ định.

+1

Đây là một phần mở rộng thực hiện điều đó: https://github.com/dan-klasson/django-tastypie-specified-fields. Mặc dù nó chưa hỗ trợ m2m. –

0

Quan hệ ngược không được tạo ra theo mặc định trong tastypie nhưng có vẻ khá đơn giản:

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

Không, tôi đã thực hiện chính xác điều này cho thấy các đối tượng trong json khóa học, theo json được đăng trong câu hỏi. Tôi đã tự hỏi nếu tôi chỉ có thể nhận được các đối tượng chỉ, hoặc không câu hỏi của tôi không có ý nghĩa? cảm ơn. – zubinmehta

+0

Tôi đã thêm đầy đủ = True, không còn liên kết nào khác ngoài các đối tượng đầy đủ ... đó có phải là những gì bạn muốn không? Tôi đang khám phá ra những người ăn ngon với bạn để trả lời vì vậy hãy vui vẻ nhé ^^. – christophe31

+0

bạn vẫn có thể làm 2 khóa học ressource để có một với chỉ các đối tượng của chúng tôi có một ressource chủ đề với một tùy chỉnh query_filter http://django-tastypie.readthedocs.org/en/latest/resources.html#advanced-filtering – christophe31

0

Tôi gặp vấn đề tương tự. sau đó tôi thực hiện một phần mở rộng django-tastypie rất đơn giản gọi là django-tastypie-specific-fields mà sẽ giúp bạn lựa chọn các lĩnh vực bạn quan tâm. Bạn sẽ có thể lấy dữ liệu của bạn với một yêu cầu đơn giản như vậy

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

Nó cũng sẽ cung cấp cho bạn nhiều khả năng hơn.

Các vấn đề liên quan