示例#1
0
class Reaction(db.Model):
    __tablename__ = 'reaction'

    # Basic information
    id = db.Column(db.Integer, primary_key=True)
    label = db.Column(db.String)
    time = db.Column(db.TIMESTAMP, default=db.func.now())

    # Bidirectional one-to-many user <-> reaction relationship
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', back_populates='reactions')

    # Bidirectional one-to-many post <-> reaction relationship
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    posts = db.relationship('Post', back_populates='reactions')
示例#2
0
文件: models.py 项目: MChrys/Metron
class Character(db.Model):

    __tablename__ = 'character'
    __table_args__ = {'extend_existing': True}
    Id = db.Column(db.Integer(), primary_key=True)
    Name = db.Column(db.String(), nullable=False)
    Age = db.Column(db.Integer(), nullable=False)
    Weight = db.Column(db.Integer() ,nullable=False)
    Human = db.Column(db.Boolean(), nullable=False)
    Hat_id = db.Column(db.Integer(), db.ForeignKey('hat.Id'), nullable =True)
    Hat = db.relationship("Hat", single_parent= True,uselist=False, cascade = "all, delete, delete-orphan" )

    def create(self):
      db.session.add(self)
      db.session.commit()
      return self
    def __init__(self,Name,Age,Weight,Human,Hat):
        self.Name = Name
        self.Age = Age
        self.Weight = Weight
        #print('Human',Human)
        self.Human = Human
        self.Hat = Hat
    def __repr__(self):
        return '' % self.Id
示例#3
0
class OAuth(OAuthConsumerMixin, db.Model):
    __table_args__ = (db.UniqueConstraint("provider", "provider_user_id"),)
    provider_user_id = db.Column(db.String(256), nullable=False)
    provider_user_login = db.Column(db.String(256), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey(User.id), nullable=False)
    user = db.relationship(
        User,
        # This `backref` thing sets up an `oauth` property on the User model,
        # which is a dictionary of OAuth models associated with that user,
        # where the dictionary key is the OAuth provider name.
        backref=db.backref(
            "oauth",
            collection_class=attribute_mapped_collection("provider"),
            cascade="all, delete-orphan",
        ),
    )
示例#4
0
class ContentTag(db.Model):
    __tablename__ = 'content_tag'

    # Basic information
    id = db.Column(db.Integer, primary_key=True)
    label = db.Column(db.String)

    # Bidirectional one-to-many category <-> content tag relationship
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    category = db.relationship('Category', back_populates='ctags')

    # Bidirectional many-to-many content tag <-> post relationship
    posts = db.relationship('Post',
                            secondary=assoc_post_ctag,
                            back_populates='ctags')

    # Bidirectional many-to-many user <-> category to subscription relationship
    subscribers = db.relationship('User',
                                  secondary=assoc_user_ctag,
                                  back_populates='sub_ctags')
示例#5
0
class Post(db.Model):
    __tablename__ = 'post'

    # Basic information
    id = db.Column(db.Integer, primary_key=True)
    time = db.Column(db.TIMESTAMP, default=db.func.now())

    # Bidirectional one-to-many author <-> post relationship
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', back_populates='posts_authored')

    # Bidirectional one-to-many category <-> post relationship
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    category = db.relationship('Category', back_populates='posts')

    # Bidirectional many-to-many content tag <-> post relationship
    ctags = db.relationship('ContentTag',
                            secondary=assoc_post_ctag,
                            back_populates='posts')

    # Bidirectional one-to-many post <-> reactions relationship
    reactions = db.relationship('Reaction', back_populates='posts')

    # Bidirectional many-to-many user <-> saved posts relationship
    savers = db.relationship('User',
                             secondary=assoc_post_save,
                             back_populates='saves')

    # Bidirectional many-to-many post <-> position
    positions = db.relationship('Position',
                                secondary=assoc_post_pos,
                                back_populates='posts')

    # Content
    q_name = db.Column(db.Text)
    q_about = db.Column(db.Text)
    q_interest = db.Column(db.Text)
    q_challenges = db.Column(db.Text)
    q_change = db.Column(db.Text)
    q_helpful = db.Column(db.Text)
    q_other = db.Column(db.Text)

    def dict(self):
        return {
            'time': self.time,
            'author': self.author,
            'category': self.category,
            'ctags': self.ctags,
            'reactions': self.reactions,
            'q_name': self.q_name,
            'q_about': self.q_about,
            'q_interest': self.q_interest,
            'q_challenges': self.q_challenges,
            'q_change': self.q_change,
            'q_helpful': self.q_helpful,
            'q_other': self.q_other
        }

    def get_reactions(self):
        reactions = {}
        for reaction in ['Like', 'Dislike', 'Encouraging', 'Eye-Opening', 'Helpful', 'Motivating', 'Reassuring']:
            reactions[reaction] = Reaction.query.filter(Reaction.label == reaction.lower(),
                                                        Reaction.post_id == self.id).count()
        return reactions

    @hybrid_property
    def sort_overall(self):
        reactions = 0
        for reaction in ['Like', 'Encouraging', 'Eye-Opening', 'Helpful', 'Motivating', 'Reassuring']:
            reactions += Reaction.query.filter(Reaction.label == reaction.lower(),
                                               Reaction.post_id == self.id).count()
        reactions -= Reaction.query.filter(Reaction.label == 'dislike',
                                           Reaction.post_id == self.id).count()
        return reactions

    @hybrid_property
    def sort_like(self):
        return Reaction.query.filter(Reaction.label == 'like', Reaction.post_id == self.id).count()

    @hybrid_property
    def sort_encouraging(self):
        return Reaction.query.filter(Reaction.label == 'encouraging', Reaction.post_id == self.id).count()

    @hybrid_property
    def sort_eyeopening(self):
        return Reaction.query.filter(Reaction.label == 'eye-opening', Reaction.post_id == self.id).count()

    @hybrid_property
    def sort_helpful(self):
        return Reaction.query.filter(Reaction.label == 'helpful', Reaction.post_id == self.id).count()

    @hybrid_property
    def sort_motivating(self):
        return Reaction.query.filter(Reaction.label == 'motivating', Reaction.post_id == self.id).count()

    @hybrid_property
    def sort_reassuring(self):
        return Reaction.query.filter(Reaction.label == 'reassuring', Reaction.post_id == self.id).count()
示例#6
0
from sqlalchemy.orm.collections import attribute_mapped_collection
from sqlalchemy.ext.hybrid import hybrid_property

from init_app import db, app

bcrypt = Bcrypt()
bcrypt.init_app(app)

# =====================================================
# ASSOCIATION TABLES
# For many to many relationships
# =====================================================

# Users to demographic tags
assoc_user_dtag = db.Table('assoc_user_dtag', db.Model.metadata,
                           db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
                           db.Column('dtag_id', db.Integer, db.ForeignKey('demog_tag.id'))
                           )

# Users to positions
assoc_user_pos = db.Table('assoc_user_pos', db.Model.metadata,
                          db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
                          db.Column('pos_id', db.Integer, db.ForeignKey('position.id'))
                          )

# Posts to positions
assoc_post_pos = db.Table('assoc_post_pos', db.Model.metadata,
                          db.Column('post_id', db.Integer, db.ForeignKey('post.id')),
                          db.Column('pos_id', db.Integer, db.ForeignKey('position.id'))
                          )