db.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2017 jianglin
  5. # File Name: models.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2017-03-25 18:48:33 (CST)
  9. # Last Update: Monday 2019-05-06 23:37:21 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from flask_maple.models import ModelMixin
  14. from forums.extension import db
  15. from forums.count import Count
  16. class Board(db.Model, ModelMixin):
  17. __tablename__ = 'boards'
  18. id = db.Column(db.Integer, primary_key=True)
  19. name = db.Column(db.String(81), nullable=False)
  20. description = db.Column(db.String(128), nullable=False)
  21. parent_id = db.Column(db.Integer,
  22. db.ForeignKey('boards.id', ondelete="CASCADE"))
  23. parent = db.relationship(
  24. 'Board',
  25. remote_side=[id],
  26. backref=db.backref(
  27. 'children',
  28. remote_side=[parent_id],
  29. cascade='all,delete-orphan',
  30. lazy='dynamic'),
  31. lazy='joined',
  32. uselist=False)
  33. @property
  34. def parent_board(self):
  35. return self.parent
  36. @property
  37. def child_boards(self):
  38. return self.children
  39. @property
  40. def newest_topic(self):
  41. return self.topics.order_by('-id').first()
  42. @property
  43. def topic_count(self):
  44. # return self.topics.count()
  45. return Count.board_topic_count(self.id)
  46. @topic_count.setter
  47. def topic_count(self, value):
  48. return Count.board_topic_count(self.id, value)
  49. @property
  50. def post_count(self):
  51. return Count.board_post_count(self.id)
  52. @post_count.setter
  53. def post_count(self, value):
  54. return Count.board_post_count(self.id, value)
  55. def __str__(self):
  56. return self.name
  57. def __repr__(self):
  58. return '<Board %r>' % self.name