models.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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-6-14 23:20:13 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from maple import db
  14. from datetime import datetime
  15. from sqlalchemy import event
  16. # from flask_login import current_user
  17. tag_topic = db.Table('tag_topic',
  18. db.Column('tags_id',
  19. db.Integer,
  20. db.ForeignKey('tags.id',
  21. ondelete="CASCADE")),
  22. db.Column('topics_id',
  23. db.Integer,
  24. db.ForeignKey('topics.id',
  25. ondelete="CASCADE")))
  26. class Tags(db.Model):
  27. __tablename__ = 'tags'
  28. id = db.Column(db.Integer, primary_key=True)
  29. tagname = db.Column(db.String(64), nullable=False)
  30. summary = db.Column(db.Text)
  31. def __repr__(self):
  32. return '<Tags %r>' % self.tagname
  33. class Topic(db.Model):
  34. __tablename__ = 'topics'
  35. id = db.Column(db.Integer, primary_key=True)
  36. uid = db.Column(db.String(36), nullable=False)
  37. title = db.Column(db.String(81), nullable=False)
  38. content = db.Column(db.Text, nullable=False)
  39. publish = db.Column(db.DateTime, default=datetime.now())
  40. updated = db.Column(db.DateTime)
  41. tags = db.relationship('Tags',
  42. secondary=tag_topic,
  43. lazy='dynamic',
  44. backref="topics",
  45. cascade='all,delete-orphan',
  46. single_parent=True,
  47. # passive_deletes=True
  48. )
  49. author_id = db.Column(db.Integer,
  50. db.ForeignKey('users.id',
  51. ondelete="CASCADE"))
  52. author = db.relationship('User',
  53. backref=db.backref('topics',
  54. cascade='all,delete-orphan',
  55. lazy='dynamic'))
  56. board_id = db.Column(db.Integer,
  57. db.ForeignKey('boards.id',
  58. ondelete="CASCADE"))
  59. board = db.relationship('Board',
  60. backref=db.backref('topics',
  61. cascade='all,delete-orphan',
  62. lazy='dynamic',
  63. order_by='Topic.publish.desc()'))
  64. is_good = db.Column(db.Boolean, default=False)
  65. is_top = db.Column(db.Boolean, default=False)
  66. is_markdown = db.Column(db.Boolean, default=False)
  67. is_draft = db.Column(db.Boolean, default=False)
  68. collect_id = db.Column(db.Integer,
  69. db.ForeignKey('collects.id',
  70. ondelete="CASCADE"))
  71. collect = db.relationship('Collect',
  72. backref=db.backref('topics',
  73. cascade='all,delete-orphan',
  74. lazy='dynamic'))
  75. __mapper_args__ = {"order_by": publish.desc()}
  76. def __repr__(self):
  77. return "<Topic %r>" % self.title
  78. @event.listens_for(Topic, 'before_update')
  79. def receive_after_update(mapper, connection, target):
  80. target.updated = datetime.now()
  81. class Reply(db.Model):
  82. __tablename__ = 'replies'
  83. id = db.Column(db.Integer, primary_key=True)
  84. content = db.Column(db.Text, nullable=False)
  85. # quote = db.Column(db.Text, nullable=True)
  86. publish = db.Column(db.DateTime, default=datetime.now())
  87. updated = db.Column(db.DateTime)
  88. topic_id = db.Column(db.Integer,
  89. db.ForeignKey('topics.id',
  90. ondelete="CASCADE"))
  91. topic = db.relationship('Topic',
  92. backref=db.backref('replies',
  93. cascade='all,delete-orphan',
  94. lazy='dynamic',
  95. order_by='Reply.publish'))
  96. author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
  97. author = db.relationship('User',
  98. backref=db.backref('replies',
  99. lazy='dynamic',
  100. order_by='Reply.publish'))
  101. __mapper_args__ = {"order_by": publish.desc()}
  102. class Collect(db.Model):
  103. __tablename__ = 'collects'
  104. id = db.Column(db.Integer, primary_key=True)
  105. name = db.Column(db.String(32), nullable=False)
  106. description = db.Column(db.String(256))
  107. is_privacy = db.Column(db.Boolean, default=False)
  108. author_id = db.Column(db.Integer,
  109. db.ForeignKey('users.id',
  110. ondelete="CASCADE"))
  111. author = db.relationship('User',
  112. backref=db.backref('collects',
  113. cascade='all,delete-orphan',
  114. lazy='dynamic'))
  115. def __repr__(self):
  116. return "<Collect %r>" % self.name
  117. class Like(db.Model):
  118. __tablename__ = 'likes'
  119. id = db.Column(db.Integer, primary_key=True)
  120. author_id = db.Column(db.Integer,
  121. db.ForeignKey('users.id',
  122. ondelete="CASCADE"))
  123. reply_id = db.Column(db.Integer,
  124. db.ForeignKey('replies.id',
  125. ondelete="CASCADE"))
  126. like_time = db.Column(db.DateTime, default=datetime.now())