''' Generates a list of event types t and events e s.t. e is the next event for t. Restricted to the next n events ''' types = EventType.objects.all() future = [] for type in types: try: event = type.event_set.filter(finish__gte=datetime.now()).exclude(displayFrom__gte=datetime.now()).order_by('start')[0] except IndexError: pass else: future.append((type,event)) return sorted(future,key=lambda (t,e): e.start)[:n] register(Event,['shortDescription','longDescription','get_type_name'],order='-start',filter=lambda: Q(displayFrom__lte=datetime.now(), cancelled=False)) post_save.connect(write_file_callback, sender=Event) post_delete.connect(write_file_callback, sender=Event) post_save.connect(write_file_callback, sender=SteamEvent) post_delete.connect(write_file_callback, sender=SteamEvent) class SeatingRoom(models.Model): '''Information a room that people are sat in''' room = models.ForeignKey(Location) name = models.CharField(max_length=50) max_cols = models.IntegerField() max_rows = models.IntegerField() def __unicode__(self): return "%s @ %s" % (self.name,self.room.__unicode__())
a.move(self, save=True) if with_children: failed = [] for child in children: suffix = child.slug.rstrip('/').split('/')[-1] # disjointed pages can exist, we might end up moving a # child to somewhere that already exists, in this case we note # that one for return try: child.move("%s/%s" % (destination, suffix)) except PageAlreadyExists: failed.append(child) return failed register(Page, ['title','text']) class MovableFieldFile(FieldFile): """ An extension to the standard FieldFile with the added ability to be moved/renamed. """ def move(self, destination, save=False): """ Will move the file on disk and update the model to reflect this. """ self._require_file() old_location = self._name self._name = self.storage.save(destination, self.file) setattr(self.instance, self.field.name, self.name)
return Communication.objects.filter(date__lte=self.date).filter(type=self.type).exclude(pk=self.id) def has_next_item(self): return bool(self.successors()) def has_prev_item(self): return bool(self.predecessors()) def next_item(self): # earliest successor return self.successors().order_by("date")[0] def prev_item(self): return self.predecessors().latest("date") def last_change_time(self): from django.contrib.admin.models import LogEntry, ContentType try: cct = ContentType.objects.get(name="communication") return ( LogEntry.objects.filter(object_id=self.pk, content_type=cct) .latest("action_time") .action_time.strftime(DATE_FORMAT_STRING) ) except: return 0 register(Communication, ["title"])
return self.title def successors(self): return Communication.objects.filter(date__gte=self.date).filter(type=self.type).exclude(pk=self.id) def predecessors(self): return Communication.objects.filter(date__lte=self.date).filter(type=self.type).exclude(pk=self.id) def has_next_item(self): return bool(self.successors()) def has_prev_item(self): return bool(self.predecessors()) def next_item(self): # earliest successor return self.successors().order_by('date')[0] def prev_item(self): return self.predecessors().latest('date') def last_change_time(self): from django.contrib.admin.models import LogEntry,ContentType try: cct = ContentType.objects.get(name='communication') return LogEntry.objects.filter(object_id=self.pk,content_type=cct).latest('action_time').action_time.strftime(DATE_FORMAT_STRING) except: return 0 register(Communication, ['title'])