diff --git a/app/models.py b/app/models.py index 9e94ca0ce63f8d144820384eb2f068a8b2599a7e..7108bfa982ae0a77fd07d370950304d7f02f8a1c 100644 --- a/app/models.py +++ b/app/models.py @@ -381,6 +381,18 @@ class Network(db.Model): } +# Table required for Many-to-Many relationships between hosts and tags +hosttags_table = db.Table( + 'hosttags', + db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True), + db.Column('host_id', db.Integer, db.ForeignKey('host.id'), primary_key=True) +) + + +class Tag(QRCodeMixin, db.Model): + pass + + class Host(db.Model): id = db.Column(db.Integer, primary_key=True) network_id = db.Column(db.Integer, db.ForeignKey('network.id'), nullable=False) @@ -390,6 +402,8 @@ class Host(db.Model): mac_id = db.Column(db.Integer, db.ForeignKey('mac.id')) cnames = db.relationship('Cname', backref='host') + tags = db.relationship('Tag', secondary=hosttags_table, lazy='subquery', + backref=db.backref('hosts', lazy=True)) def __init__(self, **kwargs): # Automatically convert network to an instance of Network if it was passed