2011-01-16 2 views
20

Я использовал функцию get_or_create на своих моделях в Django. Эта функция возвращает два значения. Один из них - это сам объект, а другой - логический флаг, указывающий, был ли восстановлен существующий объект или новый.Как функция get_or_create в Django возвращает два значения?

Обычно функция может возвращать одно значение или набор значений, таких как tuple, list или словарь.

Как функция вроде get_or_create возвращает два значения?

+4

Он возвращает кортеж на самом деле .. – shanyu

+1

он возвращает кортеж с двумя элементами на нем 'return (is_exit, object)' – mouad

+0

Попробуйте следующее: 'a = 1, 2; тип печати (a) '. На самом деле это кортеж. – TryPyPy

ответ

29

get_or_create() просто возвращает кортеж двух значений. Затем вы можете использовать sequence unpacking связать два элемента кортежа двух имен, как и в documentation примере:

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

Он возвращает кортеж. Похоже, вы знали, что функции могут это сделать, а не просто, чтобы вы могли напрямую передать результаты двум переменным!

Смотрите документацию Django для 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

Использование кортежей/кортеж распаковка часто рассматривается как quite "pythonic" way возвращения более одного значения.

Смежные вопросы