class Collect(db.Model): collector_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) collected_id = db.Column(db.Integer, db.ForeignKey('travels.id'), primary_key=True) timestamp = db.Column(db.DateTime, default=datetime.utcnow) collector = db.relationship('User', back_populates='collections', lazy='joined') collected = db.relationship('Travels', back_populates='collectors', lazy='joined')
class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) timestamp = db.Column(db.DateTime, default=datetime.utcnow, index=True) author_id = db.Column(db.Integer, db.ForeignKey('user.id')) travel_id = db.Column(db.Integer, db.ForeignKey('travels.id')) replied_id = db.Column(db.Integer, db.ForeignKey('comment.id')) author = db.relationship('User', back_populates='comments') travel = db.relationship('Travels', back_populates='comments') replies = db.relationship('Comment', back_populates='replied', cascade='all, delete-orphan') replied = db.relationship('Comment', back_populates='replies', remote_side=[id])
class Follow(db.Model): follower_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) followed_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) timestamp = db.Column(db.DateTime, default=datetime.utcnow) follower = db.relationship('User', foreign_keys=[follower_id], back_populates='following', lazy='joined') followed = db.relationship('User', foreign_keys=[followed_id], back_populates='followers', lazy='joined')
class TravelHead(db.Model): id = db.Column(db.Integer, primary_key=True) filename = db.Column(db.String(60)) filename_m = db.Column(db.String(60)) travels_id = db.Column(db.Integer, db.ForeignKey('travels.id')) travels = db.relationship('Travels')
class Notification(db.Model): id = db.Column(db.Integer, primary_key=True) message = db.Column(db.Text, nullable=False) is_read = db.Column(db.Boolean, default=False) timestamp = db.Column(db.DateTime, default=datetime.utcnow, index=True) receiver_id = db.Column(db.Integer, db.ForeignKey('user.id')) receiver = db.relationship('User', back_populates='notifications')
class Travels(db.Model): id = db.Column(db.Integer, primary_key=True) uid = db.Column(db.String(30), unique=True) title = db.Column(db.String(60)) body = db.Column(db.Text) can_comment = db.Column(db.Boolean, default=True) timestamp = db.Column(db.DateTime, default=datetime.utcnow, index=True) author_id = db.Column(db.Integer, db.ForeignKey('user.id')) author = db.relationship('User', back_populates='travels') travel_head = db.relationship('TravelHead', uselist=False, cascade='all, delete-orphan') comments = db.relationship('Comment', back_populates='travel', cascade='all, delete-orphan') collectors = db.relationship('Collect', back_populates='collected', cascade='all') tags = db.relationship('Tag', back_populates='travels', secondary=association_table)
# -*- coding: utf-8 -*- import os import re from datetime import datetime from flask import current_app from flask_avatars import Identicon from MeiTu.extensions import db from flask_login import UserMixin from werkzeug.security import generate_password_hash, check_password_hash from MeiTu.extensions import whooshee association_table = db.Table( 'association_table', db.Column('travel_id', db.Integer, db.ForeignKey('travels.id')), db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))) class Follow(db.Model): follower_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) followed_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) timestamp = db.Column(db.DateTime, default=datetime.utcnow) follower = db.relationship('User', foreign_keys=[follower_id], back_populates='following',