Модели 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)
Это S такой же, как
post_save(sender, **kwargs) #where the rest of the args are a dictionary saved in **kwargs
Здесь created
имеет аналогичный смысл. Он уведомляет сигнал о том, был ли вновь создан или обновлен instance
.
Итак, если created = True
, новый объект был создан. created=False
, объект, вероятно, обновился.
Благодарим вас за ответ. Не могли бы вы также объяснить мне, что значит 'if kwargs.get (" created ", False):' означает, как в редакции? – Aamu
Отредактирован ответ .. – karthikr
Итак, означает ли это, что когда статья создается, что-то делать, иначе значение по умолчанию - False? – Aamu