sql >> Databáze >  >> RDS >> PostgreSQL

Django emuluje chování databáze při hromadném vkládání/aktualizaci/mazání

Nejprve místo přepsání uložení přidejte __before a __after můžete použít vestavěný pre_save , post_save, pre_delete, a post_delete signály. 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 a post_delete se spustí, když zavoláte delete() na sadě dotazů.

Pro hromadnou aktualizaci však budete muset ručně zavolat funkci, kterou chcete spustit, sami. A to vše můžete hodit také do transakce.

Chcete-li volat správnou funkci spouštění, pokud používáte dynamické modely, můžete zkontrolovat ContentType modelu. Například:

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. Chyba vytvoření tabulky PHP 1064

  2. Najděte a nahraďte část textu v poli pomocí MySQL

  3. Jak se připojit a extrahovat v SQL

  4. Jak zobrazit všechna oprávnění od uživatele v oracle?