django tastypie выбирает только определенное поле определенного объекта - PullRequest
5 голосов
/ 29 февраля 2012

В вкусноpie мой 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   

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

Ответы [ 3 ]

5 голосов
/ 07 марта 2012

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

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

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

0 голосов
/ 29 сентября 2016

У меня была такая же проблема. Затем я реализовал очень простое расширение django-tastypie под названием django-tastypie-specific-fields , которое поможет вам выбрать интересующие вас поля. Вы сможете получать данные с помощью такого простого запроса

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

Это также даст вам гораздо больше возможностей.

0 голосов
/ 29 февраля 2012

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

http://django -tastypie.readthedocs.org / о / последняя / resources.html # обратное отношение

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