2012-02-29 9 views
5

In tastypie mia url:///corso/1/formato API v1 = JSON ha pronunciato la seguente JSON:django tastypie solo recuperare un particolare campo di un particolare oggetto

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

voglio fare qualcosa di simile :

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

per ottenere solo l'elenco di argomenti per un determinato corso. È possibile?

+0

come servizi json non richiede SEO Non capisco il punto. O forse vuoi che tutte le materie siano legate al tuo corso. – christophe31

+0

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

+0

sì, mi stavo solo chiedendo se in un jest annidato più complicato, posso solo interrogare per l'entità che voglio. Voglio solo i soggetti, se possibile. In realtà questo json è troppo grande e stavo pensando se c'è un modo per farlo senza scrivere una nuova risorsa. – zubinmehta

risposta

5

Sto indovinando si vuole fare qualcosa di simile this in cui si specifica un parametro fields così gli utenti possono richiedere solo i campi che vogliono. Nel tuo caso, un utente potrebbe inviare la richiesta

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

Un modo per implementare questo è quello di estendere Tastypie per darvi questa funzionalità. Attualmente, il metodo full_dehydrate itera su tutti i campi e disidrata ciascuno di essi. È possibile aggiungere un assegno per verificare se l'utente ha immesso fields e, in tal caso, saltare la fase di disidratazione per tutti i campi che non sono stati specificati.

+1

Ecco un estensione che fa proprio questo: https://github.com/dan-klasson/django-tastypie-specified-fields. Anche se non supporta ancora m2m. –

0

I rapporti inversa non sono creati per impostazione predefinita in tastypie ma sembra piuttosto semplice:

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

No, ho fatto esattamente la stessa cosa che mostra i soggetti all'interno del corso, come per il JSON postato nella domanda. Mi stavo chiedendo se posso solo ottenere le materie solo, o la mia domanda non ha senso? Grazie. – zubinmehta

+0

Ho aggiunto pieno = Vero, non ci sono più collegamenti ma oggetti completi ... era quello che volevi? Sto scoprendo tastypie con te per rispondere quindi per favore sii indulgente ^^. – christophe31

+0

si può ancora fare una risorsa di 2 corsi per avere uno solo con soggetti che hanno una risorsa soggetto con una query_filter personalizzato http://django-tastypie.readthedocs.org/en/latest/resources.html#advanced-filtering – christophe31

0

Ho avuto lo stesso problema. Ho poi implementato una semplice estensione django-tastypie chiamato django-tastypie-specific-fields che vi aiuterà a selezionare i campi a cui è interessato. Sarete in grado di recuperare i dati con una richiesta così semplice

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

Sarà anche darvi molte più possibilità.

Problemi correlati