diff --git a/app/validators.py b/app/validators.py
index 0248e7af92acf02c09b0b02409264e30b1a65107..575bc87e6e87f9a48881a9cf8f13c27fe1024593 100644
--- a/app/validators.py
+++ b/app/validators.py
@@ -80,6 +80,8 @@ class Unique(object):
                 raise ValidationError(self.message)
         except sa.orm.exc.NoResultFound:
             pass
+        except sa.exc.DataError as e:
+            raise ValidationError(f"DBAPIError: {e.orig}")
 
 
 class UniqueAccrossModels:
diff --git a/tests/functional/test_web.py b/tests/functional/test_web.py
index 757e5e9ac1c56b1028621dc5d3bf890f2c1f5f51..820a66744fe412f53a6581501d97aceecc51c181 100644
--- a/tests/functional/test_web.py
+++ b/tests/functional/test_web.py
@@ -327,9 +327,11 @@ def test_create_host(client, domain_factory, network_factory, device_type):
     logout(client)
     # Success with user_prod user
     login(client, "user_prod", "userprod")
-    response = client.post(f"/network/hosts/create", data=form)
-    assert response.status_code == 302
+    response = client.post(f"/network/hosts/create", data=form, follow_redirects=True)
+    assert response.status_code == 200
     # The host was created
+    assert b"created!" in response.data
+    assert b"View host" in response.data
     host = models.Host.query.filter_by(name=name).first()
     assert host is not None
     assert host.interfaces[0].ip == ip
@@ -337,6 +339,52 @@ def test_create_host(client, domain_factory, network_factory, device_type):
     assert host.interfaces[0].name == name
 
 
+def test_create_host_invalid_fields(
+    session, client, domain_factory, network_factory, device_type
+):
+    domain = domain_factory(name="prod.example.org")
+    network = network_factory(
+        address="192.168.1.0/24",
+        first_ip="192.168.1.10",
+        last_ip="192.168.1.250",
+        domain=domain,
+    )
+    name = "myhost"
+    ip = "192.168.1.11"
+    mac = "02:42:42:45:3c:89"
+    form = {
+        "network_id": network.id,
+        "name": name,
+        "device_type_id": device_type.id,
+        "ip": ip,
+        "mac": mac,
+        "description": "test",
+        "ansible_vars": "",
+        "ansible_groups": [],
+        "tags": [],
+        "random_mac": False,
+        "cnames_string": "",
+    }
+    login(client, "user_prod", "userprod")
+    # Invalid mac
+    data = form.copy()
+    data["mac"] = "ea:ea:60:45:a8:96:se"
+    response = client.post(f"/network/hosts/create", data=data, follow_redirects=True)
+    assert response.status_code == 200
+    assert b"Register new host" in response.data
+    assert b"Invalid MAC address" in response.data
+    # An exception was raised during validation (on Select in the Unique Validator),
+    # so we need to rollback.
+    session.rollback()
+    # Invalid hostname
+    data = form.copy()
+    data["name"] = "invalid_host"
+    response = client.post(f"/network/hosts/create", data=data, follow_redirects=True)
+    assert response.status_code == 200
+    assert b"Register new host" in response.data
+    assert b"Invalid input" in response.data
+
+
 def test_create_interface(
     client, host_factory, domain_factory, network_factory, interface_factory
 ):