models.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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-28 17:58:59 (CST)
  9. # Last Update:星期三 2017-3-29 19:10:23 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from datetime import datetime
  14. from flask_maple.models import ModelMixin, ModelTimeMixin, ModelUserMixin
  15. from flask_login import current_user
  16. from forums.api.user.models import User
  17. from forums.extension import db
  18. topic_collect = db.Table(
  19. 'topic_collect',
  20. db.Column('topic_id', db.Integer, db.ForeignKey('topics.id')),
  21. db.Column('collect_id', db.Integer, db.ForeignKey('collects.id')))
  22. collect_follower = db.Table(
  23. 'collect_follower',
  24. db.Column('collect_id', db.Integer, db.ForeignKey('collects.id')),
  25. db.Column('follower_id', db.Integer, db.ForeignKey('users.id')))
  26. class Collect(db.Model, ModelMixin):
  27. __tablename__ = 'collects'
  28. id = db.Column(db.Integer, primary_key=True)
  29. name = db.Column(db.String(32), nullable=False)
  30. description = db.Column(db.String(256), nullable=True)
  31. is_hidden = db.Column(db.Boolean, default=False)
  32. created_at = db.Column(
  33. db.DateTime, default=datetime.utcnow(), nullable=False)
  34. updated_at = db.Column(
  35. db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())
  36. author_id = db.Column(
  37. db.Integer, db.ForeignKey(
  38. 'users.id', ondelete="CASCADE"))
  39. author = db.relationship(
  40. User,
  41. backref=db.backref(
  42. 'collects', cascade='all,delete-orphan', lazy='dynamic'),
  43. lazy='joined')
  44. topics = db.relationship(
  45. 'Topic',
  46. secondary=topic_collect,
  47. backref=db.backref(
  48. 'collects', lazy='dynamic'),
  49. lazy='dynamic')
  50. followers = db.relationship(
  51. 'User',
  52. secondary=collect_follower,
  53. backref=db.backref(
  54. 'following_collects', lazy='dynamic'),
  55. lazy='dynamic')
  56. def is_followed(self, user=None):
  57. if user is None:
  58. user = current_user
  59. return db.session.query(collect_follower).filter(
  60. collect_follower.c.collect_id == self.id,
  61. collect_follower.c.follower_id == user.id).exists()
  62. def __str__(self):
  63. return self.name
  64. def __repr__(self):
  65. return "<Collect %r>" % self.name