We use something like the following when migration data containing fields that have auto_now or auto_now_add:
#Hack must override the pre_save to get touched to update correctly. def no_touch_pre_save(self, model_instance, add): return super(models.fields.DateField, self).pre_save(model_instance, add) #End override touched.
def no_auto_add(fn): """ Hack django to not update touched - used for migrations. """ def _no_auto_add(*args, **kwargs): #Force users to be explicit in this method about touched fields. old_pre_save = models.fields.DateField.pre_save models.fields.DateField.pre_save = no_touch_pre_save
#Call fn ret = fn(*args, **kwargs)
#Revert to old skool pre_save in case. models.fields.DateField.pre_save = old_pre_save return ret return _no_auto_add
Comment
We use something like the following when migration data containing fields that have auto_now or auto_now_add:
#Hack must override the pre_save to get touched to update correctly.
def no_touch_pre_save(self, model_instance, add):
return super(models.fields.DateField, self).pre_save(model_instance, add)
#End override touched.
def no_auto_add(fn):
"""
Hack django to not update touched - used for migrations.
"""
def _no_auto_add(*args, **kwargs):
#Force users to be explicit in this method about touched fields.
old_pre_save = models.fields.DateField.pre_save
models.fields.DateField.pre_save = no_touch_pre_save
#Call fn
ret = fn(*args, **kwargs)
#Revert to old skool pre_save in case.
models.fields.DateField.pre_save = old_pre_save
return ret
return _no_auto_add