models.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #*************************************************************************
  2. # Copyright © 2015 JiangLin. All rights reserved.
  3. # File Name: articledb.py
  4. # Author:JiangLin
  5. # Mail:xiyang0807@gmail.com
  6. # Created Time: 2015-11-29 02:07:53
  7. #*************************************************************************
  8. #!/usr/bin/env python
  9. # -*- coding=UTF-8 -*-
  10. from maple import db
  11. from datetime import datetime
  12. from flask_login import current_user
  13. tag_question = db.Table('tag_question',
  14. db.Column('tags_id',
  15. db.Integer,
  16. db.ForeignKey('tags.id',
  17. ondelete="CASCADE")),
  18. db.Column('questions_id',
  19. db.Integer,
  20. db.ForeignKey('questions.id',
  21. ondelete="CASCADE")))
  22. class Tags(db.Model):
  23. __tablename__ = 'tags'
  24. '''帖子节点'''
  25. id = db.Column(db.Integer, primary_key=True)
  26. author = db.Column(db.String(50), nullable=False)
  27. name = db.Column(db.String(50), nullable=False)
  28. time = db.Column(db.DateTime, nullable=False)
  29. __mapper_args__ = {"order_by": time.desc()}
  30. def __init__(self, name, author):
  31. self.name = name
  32. self.author = author
  33. self.time = datetime.now()
  34. def __repr__(self):
  35. return '<Tags %r>' % self.name
  36. class Questions(db.Model):
  37. __tablename__ = 'questions'
  38. id = db.Column(db.Integer, primary_key=True)
  39. title = db.Column(db.String(50), nullable=False)
  40. content = db.Column(db.Text, nullable=False)
  41. time = db.Column(db.DateTime, nullable=False)
  42. kind = db.Column(db.String(60), nullable=True)
  43. tags = db.relationship('Tags',
  44. secondary=tag_question,
  45. lazy='dynamic',
  46. backref="questions",
  47. cascade='all,delete-orphan',
  48. single_parent=True,
  49. # passive_deletes=True,
  50. order_by='Tags.time.desc()')
  51. is_good = db.Column(db.Boolean, nullable=False, default=False)
  52. is_top = db.Column(db.Boolean, nullable=False, default=False)
  53. is_markdown = db.Column(db.Boolean, nullable=False, default=False)
  54. is_group = db.Column(db.Boolean, nullable=False, default=False)
  55. last_author = db.Column(db.String, nullable=False)
  56. last_time = db.Column(db.DateTime, nullable=False)
  57. collectors = db.relationship('User',
  58. secondary='collects',
  59. backref=db.backref('collect_questions',
  60. cascade='all,delete',
  61. lazy='dynamic'))
  62. author_id = db.Column(db.Integer, db.ForeignKey('users.id',
  63. ondelete="CASCADE"))
  64. author = db.relationship('User',
  65. backref=db.backref('questions',
  66. cascade='all,delete-orphan',
  67. lazy='dynamic'))
  68. group_id = db.Column(db.Integer,
  69. db.ForeignKey('groups.id',
  70. ondelete="CASCADE"))
  71. group = db.relationship('Group',
  72. backref=db.backref('questions',
  73. cascade='all,delete-orphan',
  74. lazy='dynamic'))
  75. board_id = db.Column(db.Integer,
  76. db.ForeignKey('board_s.id',
  77. ondelete="CASCADE"))
  78. board = db.relationship('Board_S',
  79. backref=db.backref('questions',
  80. cascade='all,delete-orphan',
  81. lazy='dynamic'))
  82. __mapper_args__ = {"order_by": time.desc()}
  83. def __init__(self, title, content, kind):
  84. self.title = title
  85. self.content = content
  86. self.kind = kind
  87. self.time = datetime.now()
  88. self.last_author = current_user.name
  89. self.last_time = datetime.now()
  90. def __repr__(self):
  91. return "<Questions %r>" % self.title
  92. @staticmethod
  93. def load_by_id(mode):
  94. return Questions.query.filter_by(id=mode).first_or_404()
  95. @staticmethod
  96. def load_by_kind(mode):
  97. return Questions.query.filter_by(kind=mode).all()
  98. class Replies(db.Model):
  99. __tablename__ = 'replies'
  100. id = db.Column(db.Integer, primary_key=True)
  101. content = db.Column(db.Text, nullable=False)
  102. quote = db.Column(db.Text, nullable=True)
  103. time = db.Column(db.DateTime, nullable=False)
  104. question_id = db.Column(db.Integer,
  105. db.ForeignKey('questions.id',
  106. ondelete="CASCADE"))
  107. question = db.relationship('Questions',
  108. backref=db.backref('replies',
  109. cascade='all,delete-orphan',
  110. lazy='dynamic',
  111. order_by='Replies.time'))
  112. lovers = db.relationship('User',
  113. secondary='loves',
  114. backref=db.backref('love_replies',
  115. cascade='all,delete',
  116. lazy='dynamic'))
  117. author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  118. author = db.relationship('User',
  119. backref=db.backref('replies',
  120. lazy='dynamic',
  121. order_by='Replies.time'))
  122. __mapper_args__ = {"order_by": time.desc()}
  123. def __init__(self, content, quote):
  124. self.content = content
  125. self.quote = quote
  126. self.time = datetime.now()
  127. def __repr__(self):
  128. return "<Replies %r>" % self.content
  129. @staticmethod
  130. def load_by_id(mode):
  131. return Replies.query.filter_by(id=mode).first()
  132. class Collector(db.Model):
  133. __tablename__ = 'collects'
  134. id = db.Column(db.Integer, primary_key=True)
  135. user_id = db.Column(db.Integer,
  136. db.ForeignKey('users.id',
  137. ondelete="CASCADE"))
  138. question_id = db.Column(db.Integer,
  139. db.ForeignKey('questions.id',
  140. ondelete="CASCADE"))
  141. collect_time = db.Column(db.DateTime,
  142. default=datetime.now(),
  143. nullable=False)
  144. def __init__(self):
  145. self.collect_time = datetime.now()
  146. @staticmethod
  147. def load_by_id(qid, uid):
  148. return Collector.query.filter_by(question_id=qid, user_id=uid).first()
  149. @staticmethod
  150. def load(qid, uid):
  151. return Collector.query.filter_by(question_id=qid, user_id=uid).first()
  152. class Lover(db.Model):
  153. __tablename__ = 'loves'
  154. id = db.Column(db.Integer, primary_key=True)
  155. user_id = db.Column(db.Integer,
  156. db.ForeignKey('users.id',
  157. ondelete="CASCADE"))
  158. reply_id = db.Column(db.Integer,
  159. db.ForeignKey('replies.id',
  160. ondelete="CASCADE"))
  161. like_time = db.Column(db.DateTime, default=datetime.now(), nullable=False)
  162. def __init__(self):
  163. self.like_time = datetime.now()
  164. @staticmethod
  165. def load_by_id(rid, uid):
  166. return Lover.query.filter_by(reply_id=rid, user_id=uid).first()
  167. @staticmethod
  168. def load(rid, uid):
  169. return Lover.query.filter_by(reply_id=rid, user_id=uid).first()