diff options
Diffstat (limited to 'notes/models.py')
-rw-r--r-- | notes/models.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/notes/models.py b/notes/models.py new file mode 100644 index 0000000..2cd5ca6 --- /dev/null +++ b/notes/models.py @@ -0,0 +1,63 @@ +import re +from datetime import datetime +from django.db import models +from django.contrib.auth.models import User +from django.db.models.signals import post_save +from django.dispatch import receiver + +class Tag(models.Model): + title = models.CharField(max_length=128) + + class Meta: + ordering = ['title'] + +class Note(models.Model): + user = models.ForeignKey(User) + shared = models.BooleanField(default=True) + title = models.CharField(max_length=140, null=True) + tags = models.ManyToManyField(Tag, null=True, blank=True) + + def get_date(self): + return self.version_set.all()[0].created_at + + def get_user(self): + pass + + def content(self): + try: + return self.version_set.latest().content + except Version.DoesNotExist: + return '' + + def updated_at(self): + return self.version_set.latest().created_at + + def get_absolute_url(self): + return '/notes/%d/' % self.pk + + class Meta: + ordering = ['-id'] + +class Version(models.Model): + note = models.ForeignKey(Note) + user = models.ForeignKey(User) + content = models.TextField() + created_at = models.DateTimeField(default=datetime.now()) + + class Meta: + get_latest_by = 'created_at' + +class Attachment(models.Model): + content = models.FileField(upload_to='uploads') + note = models.ForeignKey(Note) + +@receiver(post_save, sender=Version) +def version_saved(sender, instance, created, **kwargs): + + tags = re.findall('#(\w+)', instance.content) + + for t in tags: + tag = Tag.objects.get_or_create(title=t)[0] + instance.note.tags.add(tag) + + instance.note.save() |