diff --git a/app/models/__init__.py b/app/models/__init__.py index fd484d2..58c31dd 100644 --- a/app/models/__init__.py +++ b/app/models/__init__.py @@ -4,3 +4,4 @@ from app.models.forum import Forum from app.models.topic import Topic from app.models.notification import Notification from app.models.program import Program +from app.models.tag import Tag diff --git a/app/models/program.py b/app/models/program.py index 592e2e1..7489510 100644 --- a/app/models/program.py +++ b/app/models/program.py @@ -19,6 +19,8 @@ class Program(Post): thread = db.relationship('Thread', foreign_keys=thread_id, back_populates='owner_program') + tags = db.relationship('Tag', back_populates='post', lazy='joined') + # TODO: Number of views, statistics, attached files, etc def __init__(self, author, title, thread): diff --git a/app/models/tag.py b/app/models/tag.py new file mode 100644 index 0000000..25cfd20 --- /dev/null +++ b/app/models/tag.py @@ -0,0 +1,15 @@ +from app import db + +class Tag(db.Model): + __tablename__ = 'tag' + id = db.Column(db.Integer, primary_key=True) + + # Tagged post + post_id = db.Column(db.Integer, db.ForeignKey('post.id'), index=True) + post = db.relationship('Post', back_populates='tags', foreign_keys=post_id) + # Tag name + name = db.Column(db.String(64), index=True) + + def __init__(self, post, tag): + self.post = post + self.tag = tag diff --git a/migrations/versions/1de8b6b6aed8_add_tags_for_programs.py b/migrations/versions/1de8b6b6aed8_add_tags_for_programs.py new file mode 100644 index 0000000..88fa5e9 --- /dev/null +++ b/migrations/versions/1de8b6b6aed8_add_tags_for_programs.py @@ -0,0 +1,38 @@ +"""add tags for programs + +Revision ID: 1de8b6b6aed8 +Revises: fcf53f1a14e3 +Create Date: 2022-05-19 18:50:12.894735 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '1de8b6b6aed8' +down_revision = 'fcf53f1a14e3' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('tag', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('post_id', sa.Integer(), nullable=True), + sa.Column('name', sa.String(length=64), nullable=True), + sa.ForeignKeyConstraint(['post_id'], ['post.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_tag_name'), 'tag', ['name'], unique=False) + op.create_index(op.f('ix_tag_post_id'), 'tag', ['post_id'], unique=False) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index(op.f('ix_tag_post_id'), table_name='tag') + op.drop_index(op.f('ix_tag_name'), table_name='tag') + op.drop_table('tag') + # ### end Alembic commands ###