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])
|