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.

  • Wie markiere ich Formularfelder mit <div class = 'field_type'> in Django
  • Django ModelForm, um einen versteckten Eingang zu haben
  • Wie klone ich ein Django-Modellinstanzobjekt und speichere es in der Datenbank?
  • Verwenden von Modellen und Formen außerhalb von Django?
  • Anpassen / entfernen Django select box leere Option
  • Models.py bekommen riesig, was ist der beste Weg, um es zu brechen?
  • Django django.db.migrations.graph.CircularDependencyError
  • Fehlende Metaklasse in Django 1.5
  • Verschieben von Modellen zwischen Django (1.8) Apps mit erforderlichen ForeignKey Referenzen
  • UUID als Standardwert im Django-Modell
  • Single Table Vererbung in Django
  • Python ist die beste Programmiersprache der Welt.