Я использую сигнал pre_save от Django для реализации auto_now_add. В Интернете много дискуссий о том, почему вы должны или не должны его реализовывать самостоятельно. Я не комментирую это. Ни о том, следует ли мне переписывать функцию сохранения (у меня есть много моделей, которые используют auto_now_add, поэтому использование сигналов имеет смысл).Django pre_save signal: проверить, не создан ли экземпляр экземпляра, существует ли kwargs ['created'] (все еще)?
Мой вопрос:
Я хотел бы проверить, создан или обновлен экземпляр. Согласно некоторым источникам в Интернете, это может быть сделано путем тестирования, если kwargs['created']
имеет значение True. Однако 'created'
не отображается в моем kwargs
, даже если экземпляр создан. Мне просто интересно, было ли это когда-либо или что оно исчезло волшебным образом. Я знаю, что я мог бы также проверить, установлен ли kwargs['instance'].id
(это действительно работает для меня), но я хотел бы знать, существует ли kwargs ['created'].
Следует иметь в виду, что если экземпляр id/pk установлен, что не обязательно означает, что объект существует в базе данных. Обычный пример: если эти экземпляры загружаются из __fixtures__. –
@Botondus: Есть ли лучший способ (чтобы избежать проблемы, о которой вы упоминаете), чтобы проверить, был ли экземпляр вновь создан или он обновляется во время pre_save? – Heyl1
Да, если PK установлен, вам действительно нужно запросить базу данных, чтобы точно определить, создан ли экземпляр или нет. Что-то вроде: MyModel.objects.filter (pk = pk_val) .exists() Фактически он реализован аналогично в внутренних функциях Django: http://code.djangoproject.com/browser/django/trunk/django/db/ model/base.py # L493 –