Sembra abbastanza semplice, ma tutte le query di Django sembrano essere "SELECT *"Come limitare le colonne restituite dalla query di Django?
Come si crea una query restituendo solo un sottoinsieme di campi?
Sembra abbastanza semplice, ma tutte le query di Django sembrano essere "SELECT *"Come limitare le colonne restituite dalla query di Django?
Come si crea una query restituendo solo un sottoinsieme di campi?
In Django 1.1 in poi, è possibile utilizzare defer('col1', 'col2')
per escludere le colonne dalla query, o only('col1', 'col2')
ad ottenere solo un insieme specifico di colonne. Vedi the documentation.
values
fa qualcosa di leggermente diverso: riceve solo le colonne specificate, ma restituisce un elenco di dizionari piuttosto che un insieme di istanze di modello.
Appendi un .values("column1", "column2", ...)
alla tua richiesta
A Nota: Se si utilizza '.get()' invece di '.filter()' per ottenere un oggetto specifico e si desidera recuperare colonne specifiche, è necessario assicurarsi che '.values ('field1' ,. ..) 'è specificato PRIMA del metodo' .get() '. Se è dopo, genera un errore perché ottiene gli oggetti e quindi tenta di eseguire il metodo '.values ()' su 'model instance' invece della proprietà' objects'. – Furbeenator
Grazie, entrambi hanno il loro uso. – philgo20
@Daniel, sai perché la documentazione afferma di evitare questi metodi? Dice che dovrebbero essere l'ultima risorsa, e altri metodi dovrebbero essere esauriti per primi. – Furbeenator
buona domanda ... – rom