from django.db import models from django.utils import timezone from neboard import settings import thumbs NO_PARENT = -1 NO_IP = '0.0.0.0' UNKNOWN_UA = '' class PostManager(models.Manager): def create_post(self, title, text, image=None, parent_id=NO_PARENT, ip=NO_IP, tags=None): post = self.create(title=title, text=text, pub_time=timezone.now(), parent=parent_id, image=image, poster_ip=ip, poster_user_agent=UNKNOWN_UA) if tags: for tag in tags: post.tags.add(tag) return post def delete_post(self, post): children = self.filter(parent=post.id) for child in children: self.delete_post(child) post.delete() def delete_posts_by_ip(self, ip): posts = self.filter(poster_ip=ip) for post in posts: self.delete_post(post) def get_threads(self, tag=None): if tag is None: threads = self.filter(parent=NO_PARENT) else: threads = self.filter(parent=NO_PARENT, tag=tag) return threads def get_thread(self, opening_post_id): opening_post = self.get(id=opening_post_id) replies = self.filter(parent=opening_post_id) thread = [opening_post] thread.extend(replies) return thread def exists(self, post_id): posts = self.filter(id=post_id) return len(posts) > 0 class Tag(models.Model): """ A tag is a text node assigned to the post. The tag serves as a board section. There can be multiple tags for each message """ name = models.CharField(max_length=100) class Post(models.Model): """A post is a message.""" objects = PostManager() title = models.CharField(max_length=100) pub_time = models.DateTimeField() text = models.TextField() image = thumbs.ImageWithThumbsField(upload_to='images/', blank=True, sizes=((200, 150),)) poster_ip = models.IPAddressField() poster_user_agent = models.TextField() parent = models.BigIntegerField() tags = models.ManyToManyField(Tag) def __unicode__(self): return self.title + ' (' + self.text + ')' class Admin(models.Model): """ Model for admin users """ name = models.CharField(max_length=100) password = models.CharField(max_length=100) def __unicode__(self): return self.name + '/' + '*' * len(self.password)