models.py 5.4 KB

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