django deliciouspie извлекает только определенное поле определенного объекта

В deliciouspie мой URL-адрес: /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   

чтобы получить только список предметов для данного курса. Это возможно?


person zubinmehta    schedule 29.02.2012    source источник


Ответы (3)


Я предполагаю, что вы хотите сделать что-то вроде это, где вы указываете параметр fields, чтобы пользователи могли запрашивать только нужные поля. В вашем случае пользователь отправит запрос

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

Один из способов реализовать это — расширить Tastypie, чтобы предоставить вам эту функциональность. В настоящее время метод full_dehydrate перебирает все поля. и обезвоживает каждый из них. Вы можете добавить проверку, чтобы увидеть, ввел ли пользователь fields, и если это так, просто пропустите фазу обезвоживания для любых полей, которые не были указаны.

person Spike    schedule 06.03.2012
comment
Вот расширение, которое делает именно это: github.com/dan-klasson/django. -tastypie-указанные-поля. Хотя он еще не поддерживает m2m. - person dan-klasson; 07.07.2013

Обратные отношения не создаются по умолчанию в deliciouspie, но выглядит довольно просто:

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()
person christophe31    schedule 29.02.2012
comment
Нет, я сделал то же самое, что показывает предметы в рамках курса json, в соответствии с json, опубликованным в вопросе. Мне было интересно, могу ли я просто получить только предметы, или мой вопрос не имеет смысла? Благодарю. - person zubinmehta; 29.02.2012
comment
Я добавил full=True, это больше не ссылки, а полные объекты... это то, что вы хотели? Я открываю для себя вкусный пирог с вами, чтобы ответить, поэтому, пожалуйста, будьте снисходительны ^^. - person christophe31; 29.02.2012
comment
вы все еще можете сделать 2 ресурса курса, чтобы иметь один только с предметами, у нас есть предметный ресурс с настраиваемым query_filter django-tastypie.readthedocs.org/en/latest/ - person christophe31; 29.02.2012