There has been some discussion about removing auto_now and auto_now_add some time ago. auto_now_add can be replaced be using a callable default value, auto_now can't. So I wrote this litte function for my current project (older ones still use auto_add) to fill the gap...but I'm not sure if auto_now will be removed at all.
1 2 3 4 5 6 7 8 | # Takes model and fieldname and sets field to current datetime on pre_save
def auto_now_on_save(model, fieldname):
from django.db.models import signals
from django.dispatch import dispatcher
def _update_datefield(instance):
from datetime import datetime
setattr(instance, fieldname, datetime.now())
dispatcher.connect(_update_datefield, signal=signals.pre_save, sender=model, weak=False)
|
More like this
- Add Toggle Switch Widget to Django Forms by OgliariNatan 2 months ago
- get_object_or_none by azwdevops 5 months, 3 weeks ago
- Mask sensitive data from logger by agusmakmun 7 months, 3 weeks ago
- Template tag - list punctuation for a list of items by shapiromatron 1 year, 9 months ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 1 year, 10 months ago
Comments
It's good to know that for now that Django's signals are a fairly large performance hit. To remedy this, you can simply do this:
It's one more line than if you import your solution and apply it to a field, but doesn't incur the performance penalty that signals currently entail.
#
Please login first before commenting.