aboutsummaryrefslogtreecommitdiff
path: root/src/web/models/tag.py
blob: d43ce300731b1c08f04cb3b490e427f946d7b113 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#! /usr/bin/env python
# -*- coding: utf-8 -*-

from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship

from bootstrap import db


class Tag(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    text = Column(String, unique=False)
    obj = db.Column(db.String, default='article')
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'), nullable=False)

    __mapper_args__ = {
            'polymorphic_on': obj
        }


    def __init__(self, text):
        self.text = text


class ArticleTag(Tag):
    __mapper_args__ = {
        'polymorphic_identity': 'article'
    }
    id = db.Column(db.Integer, db.ForeignKey('tag.id', ondelete='CASCADE'),
                    primary_key=True)

    # relationships
    article_id = Column(Integer, ForeignKey('article.id', ondelete='CASCADE'),
                        nullable=False)
    article = relationship('Article', back_populates='tag_objs',
                           foreign_keys=[article_id])


class BookmarkTag(Tag):
    __mapper_args__ = {
        'polymorphic_identity': 'bookmark'
    }
    id = db.Column(db.Integer, db.ForeignKey('tag.id', ondelete='CASCADE'),
                    primary_key=True)

    # relationships
    bookmark_id = Column(Integer, ForeignKey('bookmark.id', ondelete='CASCADE'),
                        nullable=False)
    bookmark = relationship('Bookmark', back_populates='tag_objs',
                           foreign_keys=[bookmark_id])
bgstack15