Как функция get_or_create в Django возвращает два значения? - PullRequest
20 голосов
/ 16 января 2011

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

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

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

Ответы [ 3 ]

29 голосов
/ 16 января 2011

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

p, created = Person.objects.get_or_create(
    first_name='John', last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)})
4 голосов
/ 16 января 2011

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

См. Документацию 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 голосов
/ 16 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...