models.py
94 lines
| 2.4 KiB
| text/x-python
|
PythonLexer
/ boards / models.py
neko259
|
r0 | from django.db import models | ||
Ilyas
|
r14 | from django.http import Http404 | ||
neko259
|
r0 | 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): | ||||
neko259
|
r17 | opening_post = self.get(id = opening_post_id) | ||
replies = self.filter(parent = opening_post_id) | ||||
neko259
|
r5 | |||
neko259
|
r17 | thread = [opening_post] | ||
thread.extend(replies) | ||||
return thread | ||||
neko259
|
r5 | |||
neko259
|
r8 | def exists(self, post_id): | ||
neko259
|
r12 | posts = self.filter(id = post_id) | ||
neko259
|
r8 | |||
neko259
|
r10 | return len(posts) > 0 | ||
neko259
|
r8 | |||
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() | ||||
Ilyas
|
r14 | image = models.ImageField(upload_to = DIR_IMAGES, blank = True) | ||
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): | ||||
Ilyas
|
r9 | return self.title + ' (' + self.text + ')' | ||
neko259
|
r11 | class Admin(models.Model): | ||
Ilyas
|
r9 | """ | ||
Model for admin users | ||||
""" | ||||
neko259
|
r12 | name = models.CharField(max_length = 100) | ||
password = models.CharField(max_length = 100) | ||||
Ilyas
|
r9 | |||
def __unicode__(self): | ||||
return self.name + '/' + '*' * len(self.password) | ||||