PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Django emuluje zachowanie wyzwalacza bazy danych podczas zbiorczego wstawiania/aktualizowania/usuwania

Po pierwsze, zamiast zastępować zapisywanie, aby dodać __before i __after metod, możesz użyć wbudowanego pre_save , post_save, pre_delete, i post_delete sygnały. 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 i post_delete zostanie wyzwolony, gdy wywołasz delete() na queryset.

W przypadku aktualizacji zbiorczej musisz jednak ręcznie wywołać funkcję, którą chcesz wyzwolić samodzielnie. Możesz to wszystko wrzucić również do transakcji.

Aby wywołać odpowiednią funkcję wyzwalacza, jeśli używasz modeli dynamicznych, możesz sprawdzić ContentType modelu. Na przykład:

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. Sqlalchemy nie działa z paginacją

  2. 7 rzeczy, na które należy zwrócić uwagę podczas wdrażania PostgreSQL

  3. GDZIE NIE ISTNIEJE w PostgreSQL daje błąd składni

  4. PostgreSQL:BŁĄD:42601:lista definicji kolumn jest wymagana dla funkcji zwracających rekord

  5. Czy funkcja LAG okna może odwoływać się do kolumny, której wartość jest obliczana?