Erstens, anstatt save zu überschreiben, um __before hinzuzufügen und __after Methoden können Sie das eingebaute pre_save verwenden , post_save, pre_delete, und post_delete Signale. 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 und post_delete wird ausgelöst, wenn Sie delete() aufrufen auf einem Abfragesatz.
Für die Massenaktualisierung müssen Sie die Funktion, die Sie auslösen möchten, jedoch manuell aufrufen. Und Sie können alles auch in eine Transaktion werfen.
Um die richtige Triggerfunktion aufzurufen, wenn Sie dynamische Modelle verwenden, können Sie den ContentType des Modells überprüfen. Zum Beispiel:
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)