Desidero che una determinata risorsa modello django-tastypie
abbia solo un sottoinsieme di campi quando si elencano gli oggetti e tutti i campi quando si mostra un dettaglio. È possibile?Can django-tastypie può visualizzare un diverso set di campi nell'elenco e visualizzare le viste di una singola risorsa?
risposta
È necessario specificare tutti i campi nell'attuale ModelResource, quindi sovrascrivere il metodo get_list
per filtrare solo i campi che si desidera visualizzare. Vedere l'implementazione interna di get_list
su Resource
per vedere come sovrascriverlo.
Tuttavia, si noti che questo si applica solo alle richieste GET, si dovrebbe comunque essere in grado di POST/PUT/PATCH sulla risorsa con tutti i campi se i limiti di autorizzazione consentono di farlo.
In un guscio di dado, si desidera eseguire il hot patch dell'elenco dei campi interni prima che venga chiamato full_dehydrate su tutti gli oggetti ORM restituiti da obj_get_list
.
In alternativa, è possibile lasciare che il meccanismo di disidratazione completo avvenga e appena alla fine di esso rimuovere i campi che non si desidera mostrare se non si cura di spremere il più rapidamente possibile. Naturalmente è necessario farlo solo se l'URL viene richiamato come conseguenza della chiamata get_list. C'è un metodo di convenienza per questo alter_list_data_to_serialize(request, to_be_serialized)
.
Basta fare:
class SomeResource(Resource):
class Meta(...):
...
field_list_to_remove = [ 'field1', 'field2' ]
...
def alter_list_data_to_serialize(request, to_be_serialized):
for obj in to_be_serialized['objects']:
for field_name in self._meta.field_list_to_remove:
del obj.data[field_name]
return to_be_serialized
C'è un open issue for this su GitHub, con una serie di soluzioni alternative suggerito lì.
È inoltre possibile utilizzare l'attributo use_in
su un campo per specificare la risorsa pertinente in cui visualizzare il campo. Può essere list
o detail
o un callback.
Questa dovrebbe essere la risposta principale. Molto più ovvio e chiaro rispetto ai metodi prevalenti. – Radagast
Questo è uno di quei casi in cui dovresti essere in grado di cambiare la risposta "Approvata" per quelli di noi che verranno in seguito alla festa. –
Può anche utilizzare il metodo di disidratazione (auto, fascio).
def dehydrate(self, bundle): del bundle.data['attr-to-del] return bundle
- 1. Can Windbg può visualizzare i nomi dei thread?
- 2. Posso, come un essere umano, visualizzare le viste di rendering di RSpec, e se, quindi come?
- 3. Come visualizzare i set di dati pubblici?
- 4. Visualizzare le viste al momento della compilazione VS2010?
- 5. Come visualizzare i campi di una tabella in Oracle?
- 6. Come visualizzare più video in visualizzazione singola?
- 7. Come visualizzare le viste mailer delle rotaie nell'API HTTP Mailgun
- 8. Come visualizzare più valori di campi in un testo Campo
- 9. Visualizzare dipendenze per campi calcolati in Knockout
- 10. singola query da cancellare e visualizzare i record duplicati
- 11. Can ffmpeg può mostrare una barra di avanzamento?
- 12. Come visualizzare le coordinate e utilizzare ginput
- 13. FFMPEG non può visualizzare la durata di un video
- 14. Come visualizzare le preferenze di sistema Android?
- 15. SQL Profiler può visualizzare i set di risultati restituiti insieme alla query?
- 16. Django Admin: Necessità di visualizzare i campi in modo condizionale
- 17. Una risorsa esiste con un caso diverso
- 18. Fading UIView consente di visualizzare le sottoview
- 19. Come visualizzare un elenco diverso di elementi quando si fa clic su una categoria
- 20. Visualizzare una typemap MPI
- 21. Posso visualizzare un set di risultati in Eclipse debugger come tabella
- 22. Come visualizzare la data in un formato diverso in oracle
- 23. Come visualizzare tutte le etichette di boxplot
- 24. Singola animazione: più viste
- 25. Come visualizzare le directory in un TreeView?
- 26. Al momento non è possibile visualizzare l'anteprima di questa risorsa. - CKAN
- 27. Solo il thread originale che ha creato una gerarchia di viste può toccare le sue viste
- 28. jqGrid - non visualizzare le barre di scorrimento
- 29. Comando per visualizzare le dipendenze di una gemma?
- 30. Can Vim può visualizzare due spazi per il rientro, mantenendo quattro spazi nel file?
Questa è una buona idea, e apprezzo la tua risposta. Mi chiedo, tuttavia, se c'è un modo per rinviare i campi dalla query originale per evitare di inviare alcuni campi piuttosto grandi sul filo. – Carson
Quindi suggerisco di creare semplicemente 2 risorse, una che mostri tutti i campi e un'altra che mostri solo il tuo sottoinsieme sullo stesso modello. È il modo più semplice senza troppi sovraccarichi. Se insisti che si tratti della stessa risorsa, puoi seguire la mia raccomandazione iniziale sull'overloading di get_list per includere solo il tuo sottoinsieme di campi quando li recuperi da ORM e li serializzi. – astevanovic
Ci dovrebbe essere 'del obj.data [field_name]'. – Mitar