One-time execution of Django model methods, when model instance meets specific conditions.
import datetime
from django.db import models
from django.db.models import Q
from terminator import execute_once
class Message(models.Model):
sent = models.BooleanField(default=False)
sender_email = models.EmailField()
recipient_email = models.EmailField()
subject = models.CharField(max_length=128)
body = models.TextField()
@execute_once(Q())
def send(self):
# Some code which sends the email…
pass
class BirthdayGift(models.Model):
birthday_date = models.DateField()
@execute_once(lambda cls: Q(birthday_date__lte=datetime.date.today()))
def send(self):
# Some code which sends the gift…
pass
Later:
from terminator import terminate
terminate()
For more extensive documentation, see the tests.