2011-01-16 8 views
20

Ho usato la funzione get_or_create sui miei modelli in Django. Questa funzione restituisce due valori. Uno è l'oggetto stesso e l'altro un flag booleano che indica se un oggetto esistente è stato recuperato o ne è stato creato uno nuovo.In che modo la funzione get_or_create in Django restituisce due valori?

Normalmente, una funzione può restituire un singolo valore o una raccolta di valori come un tuple, list o un dizionario.

In che modo una funzione come get_or_create restituisce due valori?

+4

Restituisce una tupla in realtà .. – shanyu

+1

restituisce una tupla con due elementi su di esso 'return (is_exit, object)' – mouad

+0

Prova questo: 'a = 1, 2; tipo di stampa (a) '. È davvero una tupla. – TryPyPy

risposta

29

get_or_create() restituisce semplicemente una tupla dei due valori. È quindi possibile utilizzare sequence unpacking per legare le due voci tupla a due nomi, come nell'esempio documentation:

p, created = Person.objects.get_or_create(
    first_name='John', last_name='Lennon', 
    defaults={'birthday': date(1940, 10, 9)}) 
4

Si restituisce una tupla. Sembra che tu sapessi che le funzioni potrebbero farlo, ma non che tu possa assegnare i risultati direttamente a due variabili!

Vedere la documentazione Django per get_or_create:

# Returns a tuple of (object, created), where object is the retrieved 
# or created object and created is a boolean specifying whether a new 
# object was created. 

obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon', 
        defaults={'birthday': date(1940, 10, 9)}) 
3

Utilizzando tuple/tupla disimballaggio è spesso considerato come un quite "pythonic" way di restituire più di un valore.

Problemi correlati