models.py
77 lines
| 2.0 KiB
| text/x-python
|
PythonLexer
/ boards / models.py
neko259
|
r0 | from django.db import models | |
from django.utils import timezone | |||
neko259
|
r4 | ||
NO_PARENT = -1 | |||
NO_IP = '0.0.0.0' | |||
UNKNOWN_UA = '' | |||
DIR_IMAGES = 'images' | |||
neko259
|
r0 | ||
neko259
|
r2 | class PostManager(models.Manager): | |
neko259
|
r0 | ||
neko259
|
r5 | def create_post(self, title, text, image = None, parent_id = NO_PARENT, | |
neko259
|
r4 | ip = NO_IP): | |
neko259
|
r2 | post = self.create(title = title, | |
text = text, | |||
neko259
|
r7 | pub_time = timezone.now(), | |
neko259
|
r2 | parent = parent_id, | |
image = image, | |||
poster_ip = ip, | |||
neko259
|
r4 | poster_user_agent = UNKNOWN_UA) | |
neko259
|
r0 | ||
neko259
|
r1 | return post | |
neko259
|
r0 | ||
def delete_post(self, post): | |||
neko259
|
r7 | children = self.filter(parent = post.id) | |
neko259
|
r3 | for child in children: | |
self.delete_post(child) | |||
neko259
|
r2 | post.delete() | |
neko259
|
r0 | def delete_posts_by_ip(self, ip): | |
neko259
|
r2 | posts = self.filter(poster_ip = ip) | |
neko259
|
r1 | for post in posts: | |
self.delete_post(post) | |||
neko259
|
r0 | ||
neko259
|
r5 | 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(opening_post_id) | |||
replies = self.filter(parent = opening_post_id) | |||
return [opening_post, replies] | |||
neko259
|
r8 | def exists(self, post_id): | |
posts = Post.objects.filter(id = post_id) | |||
return len(posts) == 0 | |||
neko259
|
r5 | ||
neko259
|
r4 | 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) | |||
neko259
|
r8 | ||
neko259
|
r2 | class Post(models.Model): | |
neko259
|
r4 | """A post is a message.""" | |
neko259
|
r0 | ||
neko259
|
r2 | objects = PostManager() | |
neko259
|
r0 | ||
neko259
|
r2 | title = models.CharField(max_length = 100) | |
pub_time = models.DateTimeField() | |||
text = models.TextField() | |||
neko259
|
r4 | image = models.ImageField(upload_to = DIR_IMAGES) | |
neko259
|
r2 | poster_ip = models.IPAddressField() | |
poster_user_agent = models.TextField() | |||
parent = models.BigIntegerField() | |||
neko259
|
r7 | tags = models.ManyToManyField(Tag) | |
neko259
|
r0 | ||
def __unicode__(self): | |||
neko259
|
r4 | return self.title + ' (' + self.text + ')' |