1

について誰かが私に説明してくれませんかcreated?

私はそれが次のようなもので使用されているのを見てきました:

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

そしてシグナルでも:

@receiver(post_save, sender=Article)
def create_approval(sender, **kwargs):
    if kwargs.get("created", False):
        approval = Approval.objects.create(article_id=kwargs.get('instance').id)

私は本当にこれを知る必要があります。どんな助けでも大歓迎です。ありがとうございました。

編集:

ここで、上記のコードから:

    if kwargs.get("created", False):

ここでとはcreatedどういう意味ですか? createdasの値を指定しますかFalse。または何?

4

2 に答える 2

4

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、オブジェクトが更新された可能性があります。

于 2013-11-10T13:16:06.647 に答える