How does the get_or_create function in Django return two values?


I have used the get_or_create function on my models in Django. This function returns two values. One is the object itself and the other a boolean flag that indicates whether an existing object was retrieved or a new one created.

Normally, a function can return a single value or a collection of values like a tuple, list or a dictionary.

How does a function like get_or_create return two values?

3/20/2013 5:52:43 PM

Accepted Answer

get_or_create() simply returns a tuple of the two values. You can then use sequence unpacking to bind the two tuple entries to two names, like in the documentation example:

p, created = Person.objects.get_or_create(
    first_name='John', last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)})
9/29/2012 12:44:59 PM

It returns a tuple. It sounds like you knew that functions could do this, just not that you could assign the results directly to two variables!

See the Django documentation for 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)})

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow