PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Django емулира поведение на задействане на база данни при групово вмъкване/актуализиране/изтриване

Първо, вместо да замените save, за да добавите __before и __after методи, можете да използвате вградения pre_save , post_save, pre_delete, и post_delete сигнали. 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 и post_delete ще се задейства, когато извикате delete() на набор от заявки.

За групово актуализиране обаче ще трябва ръчно да извикате функцията, която искате да задействате. Можете също така да включите всичко в транзакция.

За да извикате правилната тригерна функция, ако използвате динамични модели, можете да проверите ContentType на модела. Например:

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. Колко схеми могат да бъдат създадени в postgres

  2. Добавяне на колона към таблицата със стойност от следващия ред

  3. Еквивалент на array_agg на PostgreSQL в Oracle XE 11.2

  4. Инсталирането на PostgresSQL 9.5 е неуспешно:„инициализацията на клъстера на базата данни е неуспешна“ MAC os (голяма версия 11.4)

  5. Предаване на потребителски идентификатор към задействания на PostgreSQL