from django.db import models from django.utils import timezone class InfoItem(models.Model): name = models.CharField(max_length=255) template_url = models.CharField(max_length=512) expire_date = models.DateTimeField(blank=True,null=True) # None means never expiring item def get_dict(self): # fetch options opts = {} for o in self.options.all(): opts[o.key] = o.value # parse dict return { 'name': self.name, 'template_url': self.template_url, 'options': opts } def __str__(self): return self.name class InfoInstance(models.Model): rotation = models.ForeignKey('Rotation', related_name='instances') item = models.ForeignKey('InfoItem') duration = models.FloatField(default=15.0) # seconds def get_dict(self): return { 'item': self.item.get_dict(), 'duration': self.duration, } def __str__(self): return "{}: {} ({}s)".format(self.rotation.name, self.item.name, self.duration) class InfoOption(models.Model): class __meta__: unique_together = ("item", "key") item = models.ForeignKey('InfoItem', related_name='options') key = models.CharField(max_length=255) value = models.CharField(max_length=255) def __str__(self): return "{}: {} -> {}".format(self.item.name, self.key, self.value) class Rotation(models.Model): name = models.CharField(max_length=255) def get_dict(self): # exclude expired items from rotation (note: using filter would exclude items with no expide_date) instances = self.instances.exclude(item__expire_date__lt=timezone.now()) instance_list = list(map(lambda i:i.get_dict(), instances)) return { 'name': self.name, 'instances': instance_list, } def __str__(self): return self.name class ABBJob(models.Model): sw_id = models.IntegerField(default=-1) title = models.CharField(max_length=255) QR = models.CharField(max_length=255, default="") created = models.DateTimeField(default=timezone.now) def get_dict(self): return { "title": self.title, "QR": self.QR, } def __str__(self): return self.title