Ответ 1
В соответствии с последней версией Django pre_save
НЕ отправляет аргумент created
. Post_save
однако делает. Я не мог найти ссылку на передачу сигнала created
, так как версия 1.0.
Я использую сигнал pre_save Django для реализации auto_now_add. В Интернете много дискуссий о том, почему вы должны или не должны его реализовывать самостоятельно. Я не комментирую это. Ни о том, следует ли мне переписывать функцию сохранения (у меня есть много моделей, которые используют auto_now_add, поэтому использование сигналов имеет смысл).
Мой вопрос:
Я хотел бы проверить, создан или обновлен экземпляр. Согласно некоторым источникам в Интернете, это может быть сделано путем тестирования, если kwargs['created']
- True. Однако 'created'
не отображается в моем kwargs
, даже если экземпляр только что создан.
Я просто задавался вопросом, существовало ли это когда-либо или что оно исчезло волшебным образом.
Я знаю, что я мог бы также проверить, установлен ли kwargs['instance'].id
(это действительно работает для меня), но я хотел бы знать, существует ли kwargs ['created'].
В соответствии с последней версией Django pre_save
НЕ отправляет аргумент created
. Post_save
однако делает. Я не мог найти ссылку на передачу сигнала created
, так как версия 1.0.
Атрибут первичного ключа, обычно назначаемый базой данных при первом сохранении экземпляра. Поэтому вы можете использовать что-то вроде if instance.pk is None
Я не уверен, что это рекомендуемый способ, но метод @Radagast не работал у меня (не уверен, что это потому, что я использую пользовательские Pk).
Я попробовал следующее (не уверен, что это лучший способ):
@receiver(pre_save, sender=YourModelName, weak=False, )
def presave_payment_model_check(sender, instance=None, created=False, **kwargs):
#Reference: /questions/288618/django-what-is-the-role-of-modelstate
if instance._state.adding is True:
# we would need to create the object
print "Creating an object"
else:
#we are updating the object
print "Updating an object"
Ссылка: Django: Какова роль ModelState?
Использование instance._state.adding является наиболее логичным подходом, так как вы сможете сказать, что состояние модели существует или является новым, независимо от того, назначен ли первичный ключ или нет.