/
model.py
75 lines (52 loc) · 1.81 KB
/
model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#sqlalchemy imports
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Table
from sqlalchemy.orm import relationship
from sqlalchemy.types import Text
#local imports
from database import db
from markdown import markdown
post_tags = Table(
"post_tag_map",
db.Model.metadata,
Column("post_id", Integer, ForeignKey("posts.id")),
Column("tag_id", Integer, ForeignKey("tags.id")))
class Post(db.Model):
__tablename__ = "posts"
id = Column(Integer, primary_key=True)
category_id = Column(Integer, ForeignKey("categories.id"))
title = Column(String(50), nullable=False)
content = Column(Text, nullable=False)
post_time = Column(DateTime, nullable=False)
@property
def markdown_content(self):
return markdown(
self.content,
extensions=['codehilite(linenums=False)'])
#many to many Post<->Tag
tags = relationship("Tag", secondary=post_tags)
#many to one Post<->Category
category = relationship("Category")
def __init__(self, title=None, content=None, post_time=None):
self.title = title
self.content = content
self.post_time = post_time
def __repr__(self):
return "<Post:%s>" % self.title
class Category(db.Model):
__tablename__ = "categories"
id = Column(Integer, primary_key=True)
name = Column(String(10))
posts = relationship("Post", order_by="Post.id")
def __init__(self, name):
self.name = name
def __repr__(self):
return "<Category: %s>" % self.name
class Tag(db.Model):
__tablename__ = "tags"
id = Column(Integer, primary_key=True)
name = Column(String(10))
posts = relationship("Post", secondary=post_tags)
def __init__(self, name):
self.name = name
def __repr__(self):
return "<Tag:%s>" % self.name