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