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
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 7 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.