2011-01-16 13 views
20

Użyłem funkcji get_or_create w moich modelach w Django. Ta funkcja zwraca dwie wartości. Jeden to sam obiekt, a drugi flaga logiczna, która wskazuje, czy istniejący obiekt został pobrany, czy nowy został utworzony.W jaki sposób funkcja get_or_create w Django zwraca dwie wartości?

Zwykle funkcja może zwrócić pojedynczą wartość lub zbiór wartości, takich jak tuple, list lub słownik.

W jaki sposób funkcja taka jak get_or_create zwraca dwie wartości?

+4

Zwraca krotkę faktycznie .. – shanyu

+1

zwraca krotkę z dwoma elementami na niej 'return (is_exit, object)' – mouad

+0

Spróbuj tego: 'a = 1, 2; typ wydruku (a) '. To naprawdę krotka. – TryPyPy

Odpowiedz

29

get_or_create() po prostu zwraca krotkę dwóch wartości. Następnie można użyć sequence unpacking powiązać dwa wpisy krotka do dwóch nazwisk, jak na przykład documentation:

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

Zwraca krotki. Wygląda na to, że wiesz, że funkcje mogą to zrobić, ale nie możesz przypisać wyników bezpośrednio do dwóch zmiennych!

znaleźć w dokumentacji Django dla 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

Korzystanie krotki/krotka rozpakowywanie jest często uważana za quite "pythonic" way powrotu więcej niż jedną wartość.

Powiązane problemy