models.py 6.1 KB

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