##// END OF EJS Templates
Partially fixed tests and model definition
Partially fixed tests and model definition

File last commit:

r7:bb33ad66 default
r7:bb33ad66 default
Show More
models.py
71 lines | 1.9 KiB | text/x-python | PythonLexer
from django.db import models
from django.utils import timezone
NO_PARENT = -1
NO_IP = '0.0.0.0'
UNKNOWN_UA = ''
DIR_IMAGES = 'images'
class PostManager(models.Manager):
def create_post(self, title, text, image = None, parent_id = NO_PARENT,
ip = NO_IP):
post = self.create(title = title,
text = text,
pub_time = timezone.now(),
parent = parent_id,
image = image,
poster_ip = ip,
poster_user_agent = UNKNOWN_UA)
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(opening_post_id)
replies = self.filter(parent = opening_post_id)
return [opening_post, replies]
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 = models.ImageField(upload_to = DIR_IMAGES)
poster_ip = models.IPAddressField()
poster_user_agent = models.TextField()
parent = models.BigIntegerField()
tags = models.ManyToManyField(Tag)
def __unicode__(self):
return self.title + ' (' + self.text + ')'