diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cf95e1be91c18765a9b8ba98c83dcd77fd91ad93..a637f9c7d62ddba7b5e1f312da14a8d0e7143c34 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -32,6 +32,7 @@ type-checking:
     - medium
   image: "$CI_REGISTRY_IMAGE/qbcontainer"
   script:
+    - find -name '__pycache__' -type d -exec rm {} +
     - python3 -m mypy --install-types --non-interactive querybuilder/ 
 
 test:
diff --git a/querybuilder/helpers/schema.py b/querybuilder/helpers/schema.py
index 9ca9c06736ac87117d56422902697d2f2a0f4b1a..cf37fcca6ee696284996782d53cd1cf7242a5385 100644
--- a/querybuilder/helpers/schema.py
+++ b/querybuilder/helpers/schema.py
@@ -320,25 +320,26 @@ class Field:
 
     def to_named_column(
         self: NamedColumn | ColumnSpec,
-        relation_name: Optional[str] = None,
-        schema_name: Optional[str] = None,
+        relation_name: str | None | _MISSING_TYPE = MISSING,
+        schema_name: str | None | _MISSING_TYPE = MISSING,
     ) -> NamedColumn:
         assert self.name
         assert self.sqltype
-        assert (
-            not self.relation_name
-            or not relation_name
-            or self.relation_name == relation_name
-        )
-        assert (
-            not self.schema_name or not schema_name or self.schema_name == schema_name
-        )
-        return NamedColumn(
-            self.sqltype,
-            self.name,
-            self.relation_name or relation_name,
-            self.schema_name or schema_name,
-        )
+        if relation_name is MISSING:
+            relation_name = self.relation_name
+        elif relation_name is None:
+            schema_name = None
+        relation_name = cast(Optional[str], relation_name)
+        if schema_name is MISSING:
+            schema_name = self.schema_name
+        schema_name = cast(Optional[str], schema_name)
+        if relation_name:
+            assert not self.relation_name or self.relation_name == relation_name
+        if schema_name:
+            assert relation_name
+            assert not self.schema_name or self.schema_name == schema_name
+
+        return NamedColumn(self.sqltype, self.name, relation_name, schema_name)
 
     @classmethod
     def _resolve_str_spec(
@@ -506,7 +507,7 @@ class Field:
     ) -> Optional[qb.atoms.constraints.ColumnCheck]:
         check: Optional[str | Column | qb.atoms.constraints.ColumnCheck | tuple | dict]
         if callable(self.check):
-            check = self.check(self.to_named_column(), relation)
+            check = self.check(self.to_named_column(relation_name=None), rel)
         else:
             check = self.check
         if check is None:
@@ -540,6 +541,7 @@ class Field:
             qb.atoms.constraints.ColumnDefault,
         ]
         if callable(self.default):
+            # TODO: when is a callable default useful?
             default = self.default(self.to_named_column())
         else:
             default = self.default