models.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #!/usr/bin/env python
  2. # -*- coding=UTF-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2016 jianglin
  5. # File Name: models.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2016-05-20 13:32:12 (CST)
  9. # Last Update:星期四 2016-7-7 3:55:35 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask import current_app
  14. from maple import db
  15. from datetime import datetime
  16. from sqlalchemy import event
  17. tag_topic = db.Table('tag_topic', db.Column('tags_id', db.Integer,
  18. db.ForeignKey('tags.id')),
  19. db.Column('topics_id', db.Integer,
  20. db.ForeignKey('topics.id')))
  21. class Tags(db.Model):
  22. __tablename__ = 'tags'
  23. id = db.Column(db.Integer, primary_key=True)
  24. time = db.Column(db.DateTime, default=datetime.utcnow())
  25. tagname = db.Column(db.String(64), nullable=False)
  26. summary = db.Column(db.Text)
  27. def __str__(self):
  28. return self.tagname
  29. def __repr__(self):
  30. return '<Tags %r>' % self.tagname
  31. class Topic(db.Model):
  32. __tablename__ = 'topics'
  33. id = db.Column(db.Integer, primary_key=True)
  34. uid = db.Column(db.String(36), nullable=False)
  35. title = db.Column(db.String(81), nullable=False)
  36. content = db.Column(db.Text, nullable=False)
  37. publish = db.Column(db.DateTime, default=datetime.utcnow())
  38. updated = db.Column(db.DateTime)
  39. vote = db.Column(db.Integer, default=0)
  40. tags = db.relationship('Tags',
  41. secondary=tag_topic,
  42. lazy='dynamic',
  43. backref="topics", )
  44. author_id = db.Column(db.Integer,
  45. db.ForeignKey('users.id',
  46. ondelete="CASCADE"))
  47. author = db.relationship('User',
  48. backref=db.backref('topics',
  49. cascade='all,delete-orphan',
  50. lazy='dynamic'))
  51. board_id = db.Column(db.Integer,
  52. db.ForeignKey('boards.id',
  53. ondelete="CASCADE"))
  54. board = db.relationship(
  55. 'Board',
  56. backref=db.backref('topics',
  57. cascade='all,delete-orphan',
  58. lazy='dynamic',
  59. order_by='Topic.publish.desc()'))
  60. is_good = db.Column(db.Boolean, default=False)
  61. is_top = db.Column(db.Boolean, default=False)
  62. # is_top = db.Column(db.Integer, default = 0)
  63. is_markdown = db.Column(db.Boolean, default=False)
  64. is_draft = db.Column(db.Boolean, default=False)
  65. __mapper_args__ = {"order_by": publish.desc()}
  66. def __str__(self):
  67. return self.title
  68. def __repr__(self):
  69. return "<Topic %r>" % self.title
  70. # @staticmethod
  71. # def page(page):
  72. # app = current_app._get_current_object()
  73. # per_page = app.config['PER_PAGE']
  74. # return Topic.paginate(page, per_page, True)
  75. @event.listens_for(Topic, 'before_update')
  76. def receive_after_update(mapper, connection, target):
  77. target.updated = datetime.now()
  78. class Reply(db.Model):
  79. __tablename__ = 'replies'
  80. id = db.Column(db.Integer, primary_key=True)
  81. content = db.Column(db.Text, nullable=False)
  82. # quote = db.Column(db.Text, nullable=True)
  83. publish = db.Column(db.DateTime, default=datetime.now())
  84. updated = db.Column(db.DateTime)
  85. topic_id = db.Column(db.Integer,
  86. db.ForeignKey('topics.id',
  87. ondelete="CASCADE"))
  88. topic = db.relationship('Topic',
  89. backref=db.backref('replies',
  90. cascade='all,delete-orphan',
  91. lazy='dynamic',
  92. order_by='Reply.publish'))
  93. author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  94. author = db.relationship('User',
  95. backref=db.backref('replies',
  96. lazy='dynamic',
  97. order_by='Reply.publish'))
  98. __mapper_args__ = {"order_by": publish.desc()}
  99. class CollectTopic(db.Model):
  100. __tablename__ = 'collect_topic'
  101. id = db.Column(db.Integer, primary_key=True)
  102. topic_id = db.Column(db.Integer, db.ForeignKey('topics.id'))
  103. collect_id = db.Column(db.Integer, db.ForeignKey('collects.id'))
  104. class Collect(db.Model):
  105. __tablename__ = 'collects'
  106. id = db.Column(db.Integer, primary_key=True)
  107. name = db.Column(db.String(32), nullable=False)
  108. description = db.Column(db.String(256))
  109. is_privacy = db.Column(db.Boolean, default=False)
  110. author_id = db.Column(db.Integer,
  111. db.ForeignKey('users.id',
  112. ondelete="CASCADE"))
  113. author = db.relationship('User',
  114. backref=db.backref('collects',
  115. cascade='all,delete-orphan',
  116. lazy='dynamic'))
  117. topics = db.relationship('Topic',
  118. secondary='collect_topic',
  119. lazy='dynamic',
  120. backref="collects")
  121. def __str__(self):
  122. return self.name
  123. def __repr__(self):
  124. return "<Collect %r>" % self.name
  125. class Like(db.Model):
  126. __tablename__ = 'likes'
  127. id = db.Column(db.Integer, primary_key=True)
  128. author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  129. reply_id = db.Column(db.Integer, db.ForeignKey('replies.id'))
  130. like_time = db.Column(db.DateTime, default=datetime.now())
  131. # class TopicCount(db.Model):
  132. # __tablename__ = 'topic_counts'
  133. # id = db.Column(db.Integer, primary_key=True)
  134. # topic_id = db.Column(db.Integer,
  135. # db.ForeignKey('topics.id',
  136. # ondelete="CASCADE"))
  137. # topic = db.relationship("Topic",
  138. # backref="counts",
  139. # cascade='all,delete-orphan',
  140. # single_parent=True,
  141. # uselist=False)
  142. # read = db.Column(db.Integer, default=0)
  143. # reply = db.Column(db.Integer, default=0)
  144. # vote = db.Column(db.Integer, default=0)
  145. # def __repr__(self):
  146. # return '<TopicCount %r>' % self.id