2011-01-16 5 views
20

私はDjangoの私のモデルでget_or_create関数を使用しました。この関数は2つの値を返します。 1つはオブジェクト自体であり、もう1つは既存のオブジェクトが取得されたか新しいオブジェクトが作成されたかを示すブール値フラグです。Djangoのget_or_create関数はどのように2つの値を返しますか?

通常、関数は単一値またはtuplelistまたは辞書のような値の集合を返すことができます。

get_or_createのような関数はどのように2つの値を返しますか?

+4

実際にはタプルを返します。 – shanyu

+1

2つの要素を持つタプルを返します。 'return(is_exit、object) ' – mouad

+0

これを試してみましょう:' a = 1、2;印刷タイプ(a) '。それは確かにタプルです。 – TryPyPy

答えて

29

get_or_create()は、単に2つの値の組を返します。その後、documentationの例のように、二つの名前に2組のエントリをバインドするsequence unpackingを使用することができます。

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

それはタプルを返します。関数がこれを行うことができると知っていたように聞こえますが、結果を直接2つの変数に割り当てることはできません。

get_or_createのためのDjangoのドキュメントを参照してください:

# 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として考えられています。

関連する問題