In Django wie benachrichtige ich ein Elternteil, wenn ein Kind in einer ausländischen Schlüsselbeziehung gespeichert wird?

Ich habe die folgenden zwei Modelle:

class Activity(models.Model): name = models.CharField(max_length=50, help_text='Some help.') entity = models.ForeignKey(CancellationEntity) ... class Cancellation(models.Model): activity = models.ForeignKey(Activity) date = models.DateField(default=datetime.now().date()) description = models.CharField(max_length=250) ... 

Ich möchte das Aktivitätsmodell bewusst sein, wenn eine Stornierung im Zusammenhang mit ihm gespeichert ist (beide eingefügt oder aktualisiert).

Was ist der beste Weg, um das zu gehen?

2 Solutions collect form web for “In Django wie benachrichtige ich ein Elternteil, wenn ein Kind in einer ausländischen Schlüsselbeziehung gespeichert wird?”

Was Sie sehen wollen, ist Djangos Signale (siehe auch diese Seite ), speziell das Modell signalisiert – genauer gesagt das post_save Signal. Signale sind Djangos Version eines Plugins / Hakensystems. Das Post_save-Signal wird jedes Mal gesendet, wenn ein Modell gespeichert wird, ob es aktualisiert oder erstellt wurde (und es wird euch wissen lassen, ob es erstellt wurde). Dies ist, wie Sie Signale verwenden, um benachrichtigt zu werden, wenn eine Aktivität eine Stornierung hat

 from django.db.models.signals import post_save class Activity(models.Model): name = models.CharField(max_length=50, help_text='Some help.') entity = models.ForeignKey(CancellationEntity) @classmethod def cancellation_occurred (sender, instance, created, raw): # grab the current instance of Activity self = instance.activity_set.all()[0] # do something ... class Cancellation(models.Model): activity = models.ForeignKey(Activity) date = models.DateField(default=datetime.now().date()) description = models.CharField(max_length=250) ... post_save.connect(Activity.cancellation_occurred, sender=Cancellation) 

Was ist los mit dem folgenden?

 class Cancellation( models.Model ): blah blah def save( self, **kw ): for a in self.activity_set.all(): a.somethingChanged( self ) super( Cancellation, self ).save( **kw ) 

Es würde Ihnen erlauben, die Benachrichtigung unter den Modellen sehr genau zu kontrollieren. In gewisser Weise ist das der kanonische "Warum ist OO so gut?" Frage. Ich denke, OO ist gut, weil Ihre Sammlung von Stornierung und Aktivität Objekte können vollständig zusammenarbeiten.

  • Django: Wie bekomme ich einen Zeitunterschied von der Zeit nach?
  • Warum funktioniert PIL Thumbnail nicht richtig?
  • Django ModelForm, um einen versteckten Eingang zu haben
  • Django charfield verfasst den Standardwert
  • Was ist der beste Weg, um auf gespeicherte Prozeduren in Djangos ORM zuzugreifen
  • Wie man an JSON eine Liste von Modellobjekten in django / python serialisiert
  • (Django) Trim Whitespaces von charField
  • Django - bekomme den letzten Rekord mit Filter
  • Django: Ändern der URL eines optionalen ImageFields
  • Unterschied zwischen Filter mit mehreren Argumenten und Kettenfilter in Django
  • Django-Modelle (1054, "Unbekannte Spalte in" Feldliste ")
  • Python ist die beste Programmiersprache der Welt.