def get_absolute_url(self): return "/forums/threads/%s/" % self.id def __unicode__(self): return self.name class Admin: search_fields = ["name"] class Meta: verbose_name = _("thread") verbose_name_plural = _("threads") enable_notifications(Thread) class Message(models.Model): body = models.TextField(verbose_name=_("Body")) parent_thread = models.ForeignKey(Thread, related_name="child_message", verbose_name=_("Thread")) parent_message = models.ForeignKey( "self", null=True, blank=True, related_name="child_message", verbose_name=_("Parent message") ) cache_hierarchy = models.CharField(max_length=767, null=True, blank=True, editable=False, db_index=True) owner = models.ForeignKey(User, related_name="thread_messages", verbose_name=_("Owner")) creation_time = models.DateTimeField(auto_now_add=True, verbose_name=_("Creation time")) deleted = models.BooleanField(default=False, verbose_name=_("Deleted")) deleted_by = models.ForeignKey( User, blank=True, null=True, default=None, related_name="deleted_messages", verbose_name=_("Deleted by") )
def __unicode__(self): return self.title def get_absolute_url(self): return '/images/sets/%s/' % self.id class Admin: pass class Meta: ordering = ('-creation_time',) verbose_name = _('image set') verbose_name_plural = _('images sets') def set_image_size(sender, instance, **kwargs): from PIL import Image # This function is called twice for file uploads, because the object is saved twice: once without the file on # disk and one with. We ignore the first save by checking if the filename has been set yet if instance.image: image = Image.open(instance.image.path) image.thumbnail(settings.THUMBNAIL_SIZE, Image.ANTIALIAS) image.save(instance.image.path.replace(os.sep+'images'+os.sep, os.sep+'thumbnails'+os.sep)) image = Image.open(instance.image.path) image.thumbnail(settings.IMAGE_SIZE, Image.ANTIALIAS) image.save(instance.image.path) signals.post_save.connect(set_image_size, sender=Image) enable_notifications(ImageSet)
return Reply.objects.filter(event=self, choice='N').count() def number_of_unknown(self): return Reply.objects.filter(event=self, choice='?').count() def number_of_noanswer(self): return Reply.objects.filter(event=self, choice='-').count() def user_answer(self): try: from curia import get_current_user return Reply.objects.get(event=self, user=get_current_user()) except Reply.DoesNotExist: return Reply(event=self, choice='-') enable_notifications(Event) def notify_event(sender, instance, **kwargs): if instance.event_parent == None: notify(sender, instance) signals.post_save.connect(notify_event, sender=Event) class Reply(models.Model): REPLY_CHOICES = ( ('Y', _('Yes')), ('N', _('No')), ('?', _('Unsure')), ('-', _('No reply')), )
import os class File(models.Model): file = models.FileField(upload_to='files', blank=True, verbose_name=_('File')) title = models.CharField(max_length=1024, verbose_name=_('Title')) owner_user = models.ForeignKey(User, blank=True, null=True, verbose_name=_('Owner user')) owner_group = models.ForeignKey(Group, blank=True, null=True, verbose_name=_('Owner group')) creation_time = models.DateTimeField(auto_now_add=True, verbose_name=_('Creation time')) description = models.TextField(blank=True, verbose_name=_('Description')) deleted = models.BooleanField(default=False, verbose_name=_('Deleted')) deleted_by = models.ForeignKey(User, blank=True, null=True, default=None, related_name="deleted_files", verbose_name=_('Deleted by')) deletion_time = models.DateTimeField(blank=True, null=True, verbose_name=_('Deletion time')) def __unicode__(self): return self.title def save(self, force_insert=False, using=None): if self.owner_user is None and self.owner_group is None: raise ValueError('A thread must be owned by a user or a group.') models.Model.save(self, force_insert, using=using) class Admin: search_fields = ['description'] class Meta: verbose_name = _('file') verbose_name_plural = _('files') enable_notifications(File)
def __unicode__(self): return self.name def get_absolute_url(self): return '/labels/%s/' % self.name def get_corresponding_object(self): return self.content_type.get_object_for_this_type(pk=self.object_id) class Meta: verbose_name = _('label') verbose_name_plural = _('labels') enable_notifications(Label) class SuggestedLabel(models.Model): group = models.ForeignKey(Group, verbose_name=_('Group')) title = models.CharField(max_length=1024, verbose_name=_('Title')) label = models.CharField(max_length=1024, verbose_name=_('Label')) content_type = models.ForeignKey(ContentType, verbose_name=_('Content type')) creation_time = models.DateTimeField(auto_now_add=True, verbose_name=_('Creation time')) created_by = models.ForeignKey(User, blank=True, null=True, default=None, related_name="created_suggested_labels",
def number_of_unknown(self): return Reply.objects.filter(event=self, choice='?').count() def number_of_noanswer(self): return Reply.objects.filter(event=self, choice='-').count() def user_answer(self): try: from curia import get_current_user return Reply.objects.get(event=self, user=get_current_user()) except Reply.DoesNotExist: return Reply(event=self, choice='-') enable_notifications(Event) def notify_event(sender, instance, **kwargs): if instance.event_parent == None: notify(sender, instance) signals.post_save.connect(notify_event, sender=Event) class Reply(models.Model): REPLY_CHOICES = ( ('Y', _('Yes')), ('N', _('No')), ('?', _('Unsure')),
def get_absolute_url(self): return '/forums/threads/%s/' % self.id def __unicode__(self): return self.name class Admin: search_fields = ['name'] class Meta: verbose_name = _('thread') verbose_name_plural = _('threads') enable_notifications(Thread) class Message(models.Model): body = models.TextField(verbose_name=_('Body')) parent_thread = models.ForeignKey(Thread, related_name='child_message', verbose_name=_('Thread')) parent_message = models.ForeignKey('self', null=True, blank=True, related_name='child_message', verbose_name=_('Parent message')) cache_hierarchy = models.CharField(max_length=767, null=True, blank=True,
description = models.TextField(blank=True, verbose_name=_('Description')) deleted = models.BooleanField(default=False, verbose_name=_('Deleted')) deleted_by = models.ForeignKey(User, blank=True, null=True, default=None, related_name="deleted_files", verbose_name=_('Deleted by')) deletion_time = models.DateTimeField(blank=True, null=True, verbose_name=_('Deletion time')) def __unicode__(self): return self.title def save(self, force_insert=False, using=None): if self.owner_user is None and self.owner_group is None: raise ValueError('A thread must be owned by a user or a group.') models.Model.save(self, force_insert, using=using) class Admin: search_fields = ['description'] class Meta: verbose_name = _('file') verbose_name_plural = _('files') enable_notifications(File)
search_fields = ['name'] def __unicode__(self): return self.name def get_absolute_url(self): return '/labels/%s/' % self.name def get_corresponding_object(self): return self.content_type.get_object_for_this_type(pk=self.object_id) class Meta: verbose_name = _('label') verbose_name_plural = _('labels') enable_notifications(Label) class SuggestedLabel(models.Model): group = models.ForeignKey(Group, verbose_name=_('Group')) title = models.CharField(max_length=1024, verbose_name=_('Title')) label = models.CharField(max_length=1024, verbose_name=_('Label')) content_type = models.ForeignKey(ContentType, verbose_name=_('Content type')) creation_time = models.DateTimeField(auto_now_add=True, verbose_name=_('Creation time')) created_by = models.ForeignKey(User, blank=True, null=True, default=None, related_name="created_suggested_labels", verbose_name=_('Created by')) deleted = models.BooleanField(default=False, verbose_name=_('Deleted')) deleted_by = models.ForeignKey(User, blank=True, null=True, default=None, related_name="deleted_suggested_labels", verbose_name=_('Deleted by')) deletion_time = models.DateTimeField(blank=True, null=True, verbose_name=_('Deletion time')) def __unicode__(self): return self.title def get_absolute_url(self):
def get_absolute_url(self): return '/images/sets/%s/' % self.id class Admin: pass class Meta: ordering = ('-creation_time', ) verbose_name = _('image set') verbose_name_plural = _('images sets') def set_image_size(sender, instance, **kwargs): from PIL import Image # This function is called twice for file uploads, because the object is saved twice: once without the file on # disk and one with. We ignore the first save by checking if the filename has been set yet if instance.image: image = Image.open(instance.image.path) image.thumbnail(settings.THUMBNAIL_SIZE, Image.ANTIALIAS) image.save( instance.image.path.replace(os.sep + 'images' + os.sep, os.sep + 'thumbnails' + os.sep)) image = Image.open(instance.image.path) image.thumbnail(settings.IMAGE_SIZE, Image.ANTIALIAS) image.save(instance.image.path) signals.post_save.connect(set_image_size, sender=Image) enable_notifications(ImageSet)