Ten eerste, in plaats van opslaan te overschrijven om __before
toe te voegen en __after
methoden, kunt u de ingebouwde pre_save
, post_save,
pre_delete,
en post_delete
signalen. https://docs.djangoproject.com/en/1.4/topics/signals/
from django.db.models.signals import post_save
class YourModel(models.Model):
pass
def after_save_your_model(sender, instance, **kwargs):
pass
# register the signal
post_save.connect(after_save_your_model, sender=YourModel, dispatch_uid=__file__)
pre_delete
en post_delete
wordt geactiveerd wanneer u delete()
aanroept op een queryset.
Voor bulkupdates moet je de functie die je wilt activeren echter handmatig aanroepen. En je kunt het ook allemaal in een transactie gooien.
Om de juiste triggerfunctie aan te roepen als u dynamische modellen gebruikt, kunt u het ContentType van het model inspecteren. Bijvoorbeeld:
from django.contrib.contenttypes.models import ContentType
def view(request, app, model_name, method):
...
model = get_model(app, model_name)
content_type = ContentType.objects.get_for_model(model)
if content_type == ContenType.objects.get_for_model(YourModel):
after_save_your_model(model)
elif content_type == Contentype.objects.get_for_model(AnotherModel):
another_trigger_function(model)