PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Django meniru perilaku pemicu basis data pada penyisipan/pembaruan/penghapusan massal

Pertama, alih-alih mengesampingkan simpan untuk menambahkan __before dan __after metode, Anda dapat menggunakan pre_save bawaan , post_save, pre_delete, dan post_delete sinyal. 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 dan post_delete akan terpicu saat Anda memanggil delete() pada kumpulan kueri.

Namun, untuk pembaruan massal, Anda harus memanggil fungsi yang ingin Anda picu sendiri secara manual. Dan Anda juga bisa memasukkan semuanya ke dalam transaksi.

Untuk memanggil fungsi pemicu yang tepat jika Anda menggunakan model dinamis, Anda dapat memeriksa ContentType model tersebut. Misalnya:

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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql:.pgpass tidak berfungsi

  2. Fungsi AVG() di PostgreSQL

  3. Permintaan postgresql dalam 10 detik

  4. Django, mengakses urutan PostgreSQL

  5. Bagaimana Now() Bekerja di PostgreSQL