Django のモデルは、get_or_create
指定された基準 ( ) に基づいてオブジェクトを検索するという便利なメソッドを提供しますkwargs
。基準が一致しない場合、新しいオブジェクトが作成されます。
現在、返されたオブジェクトが作成されたものか既存のものかをビューで判断する方法はありません (特に、created_datetime
または類似のフィールドがない場合) created
。これはブール変数でありTrue
、ORM によって新しいオブジェクトが作成されたFalse
場合に設定され、既存のオブジェクトが取得された場合に設定されます。
さて、あなたのシナリオでは:
obj, created = Person.objects.get_or_create(first_name=’John’, last_name=’Lennon’, defaults={’birthday’: date(1940, 10, 9)})
Person
これは、オブジェクトを取得してくださいと言っていますfirst_name = John, last_name = Lennon, birthday = ...
これが見つからない場合は、新しいものを作成してください。
このシナリオでは、オブジェクトの作成中defaults
にフィールドの初期値を指定します。birthday
これも書き込みに等しい
obj = None
try:
obj = Person.objects.get(first_name=’John’, last_name=’Lennon’)
except Person.DoesNotExist:
obj = Person.objects.create(’birthday’ = date(1940, 10, 9), first_name='John', last_name = 'Lennon')
シグナルのレシーバーにkwargs
は、カスタムのキーと値のペアを含むディクショナリがあります。シグナルのドキュメントを見るとpost_save
、次の署名があるとしましょう
django.db.models.signals.post_save
post_save(sender, instance, created, raw, using, update_fields)
これは同じ
post_save(sender, **kwargs) #where the rest of the args are a dictionary saved in **kwargs
ここでcreated
は、同様の意味を持ちます。instance
新しく作成されたか、更新されたかをシグナルで通知しています。
したがって、 の場合created = True
、新しいオブジェクトが作成されました。created=False
、オブジェクトが更新された可能性があります。