forked from j2logo/tutorial-flask
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
99 lines (76 loc) · 2.77 KB
/
models.py
File metadata and controls
99 lines (76 loc) · 2.77 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"""
AUTOR: Juanjo
FECHA DE CREACIÓN: 15/02/2019
"""
import datetime
from slugify import slugify
from sqlalchemy.exc import IntegrityError
from app import db
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('blog_user.id', ondelete='CASCADE'), nullable=False)
title = db.Column(db.String(256), nullable=False)
title_slug = db.Column(db.String(256), unique=True, nullable=False)
content = db.Column(db.Text)
created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
image_name = db.Column(db.String)
comments = db.relationship('Comment', backref='post', lazy=True, cascade='all, delete-orphan',
order_by='asc(Comment.created)')
def __repr__(self):
return f'<Post {self.title}>'
def save(self):
if not self.id:
db.session.add(self)
if not self.title_slug:
self.title_slug = slugify(self.title)
saved = False
count = 0
while not saved:
try:
db.session.commit()
saved = True
except IntegrityError:
db.session.rollback()
db.session.add(self)
count += 1
self.title_slug = f'{slugify(self.title)}-{count}'
def delete(self):
db.session.delete(self)
db.session.commit()
@staticmethod
def get_by_slug(slug):
return Post.query.filter_by(title_slug=slug).first()
@staticmethod
def get_by_id(id):
return Post.query.get(id)
@staticmethod
def get_all():
return Post.query.all()
@staticmethod
def all_paginated(page=1, per_page=20):
return Post.query.order_by(Post.created.asc()). \
paginate(page=page, per_page=per_page, error_out=False)
class Comment(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('blog_user.id', ondelete='SET NULL'))
user_name = db.Column(db.String)
post_id = db.Column(db.Integer, db.ForeignKey('post.id'), nullable=False)
content = db.Column(db.Text)
created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
def __init__(self, content, user_id=None, user_name=user_name, post_id=None):
self.content = content
self.user_id = user_id
self.user_name = user_name
self.post_id = post_id
def __repr__(self):
return f'<Comment {self.content}>'
def save(self):
if not self.id:
db.session.add(self)
db.session.commit()
def delete(self):
db.session.delete(self)
db.session.commit()
@staticmethod
def get_by_post_id(post_id):
return Comment.query.filter_by(post_id=post_id).all()