Ich lese über Django-Signale (http://docs.djangoproject.com/en/dev/topics/signals/), aber soweit ich verstehe, werden Signale nie in literale SQL-Trigger (http://en.wikipedia.org/wiki/Database_trigger) konvertiert.Django-Signale vs Trigger?
Wenn ich richtig bin, dass Signale und Trigger unterschiedlich sind, welche ist dann besser und auf welche Weise? Was ist die beste Praxis?
....................
Hier ist ein konkretes Beispiel, wenn Sie eine wollen:
class Location(models.Model):
name = models.CharField(max_length=30)
class Person(models.Model):
location = models.ForeignKey('Location')
class Team(models.Model):
locations = models.ManyToManyField('Location')
Ich möchte eine Person sein, Sie können nur dann einem Team beitreten, wenn sich der Standort dieser Person innerhalb der Standortgruppe dieses Teams befindet. Ich weiß nicht, wie man das mit normalen relationalen Einschränkungen macht, also bin ich, soweit ich weiß, gezwungen, Trigger oder Signale zu verwenden. Mein Bauchgefühl sagt, dass ich Trigger verwenden sollte, aber ich möchte Best Practice wissen.
+1: Das und eine einfache Überschreibung 'save' im Modell deckt alle Basen ich je erlebt habe. –
+1. Signale verlangsamen normalerweise Ihre Tests, wenn Sie Fixtures laden, die Signale auslösen. Es ist mühsam, vor dem Test zu "trennen" und danach zu "verbinden". –
Ich habe zwei Ziele: 1) machen Sie die Website tun, was ich will (gültig) 2) fange mich, wenn * ich * einen Fehler mache. In Bezug auf # 1 macht dieser Vorschlag Sinn. In Bezug auf # 2, was ist, wenn ich nicht ein ModelForm verwenden, um mit der DB zu interagieren? In der Dokumentation heißt es: "Beachten Sie, dass Validatoren beim Speichern eines Modells nicht automatisch ausgeführt werden." Das bedeutet, dass ich jetzt die Datenintegrität verlieren kann, da ich keinen Validator aufgerufen habe, indem ich "Person.save()" aufgerufen habe, bevor ich die Datenbank ändere. Aber mit Auslösern ist es unmöglich, dass der Auslöser fälschlicherweise umgangen wird. Macht meine Argumentation Sinn? –