Đầu tiên, thay vì ghi đè lưu để thêm __before
và __after
, bạn có thể sử dụng pre_save
tích hợp sẵn , post_save,
pre_delete,
và post_delete
các tín hiệu. 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
và post_delete
sẽ được kích hoạt khi bạn gọi delete()
trên một bộ truy vấn.
Tuy nhiên, để cập nhật hàng loạt, bạn sẽ phải tự gọi hàm mà bạn muốn tự kích hoạt. Và bạn cũng có thể ném tất cả vào một giao dịch.
Để gọi hàm kích hoạt thích hợp nếu bạn đang sử dụng mô hình động, bạn có thể kiểm tra ContentType của mô hình. Ví dụ:
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)