diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 626bc52..e4d8793 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,6 +1,15 @@
 Changelog
 ---------
 
+0.22.2 (unreleased)
++++++++++++++++++++
+
+Bug fixes:
+
+* Avoid error when using ``SQLAlchemyModelSchema``, ``ModelSchema``, or ``fields_for_model``
+  with a model that has a ``SynonymProperty`` (:issue:`190`).
+* ``auto_field`` and ``field_for`` work with ``SynonymProperty``.
+
 0.22.1 (2020-02-09)
 +++++++++++++++++++
 
diff --git a/src/marshmallow_sqlalchemy/convert.py b/src/marshmallow_sqlalchemy/convert.py
index d3f0af2..32f581c 100644
--- a/src/marshmallow_sqlalchemy/convert.py
+++ b/src/marshmallow_sqlalchemy/convert.py
@@ -6,6 +6,7 @@ import uuid
 import marshmallow as ma
 from marshmallow import validate, fields
 from sqlalchemy.dialects import postgresql, mysql, mssql
+from sqlalchemy.orm import SynonymProperty
 import sqlalchemy as sa
 
 from .exceptions import ModelConversionError
@@ -93,6 +94,8 @@ class ModelConverter:
                 # Allow marshmallow to validate and exclude the field key.
                 result[prop.key] = None
                 continue
+            if isinstance(prop, SynonymProperty):
+                continue
             if hasattr(prop, "columns"):
                 if not include_fk:
                     # Only skip a column if there is no overriden column
@@ -134,6 +137,8 @@ class ModelConverter:
         return result
 
     def property2field(self, prop, *, instance=True, field_class=None, **kwargs):
+        if hasattr(prop, "_proxied_property"):  # handle synonyms
+            prop = prop._proxied_property
         field_class = field_class or self._get_field_class_for_property(prop)
         if not instance:
             return field_class
@@ -283,8 +288,8 @@ class ModelConverter:
 default_converter = ModelConverter()
 
 fields_for_model = default_converter.fields_for_model
-"""Generate a dict of field_name: `marshmallow.fields.Field` pairs for the
-given model.
+"""Generate a dict of field_name: `marshmallow.fields.Field` pairs for the given model.
+Note: SynonymProperties are ignored. Use an explicit field if you want to include a synonym.
 
 :param model: The SQLAlchemy model
 :param bool include_fk: Whether to include foreign key fields in the output.

Synonyms on Models
I have a model which makes use of a [synonym](https://docs.sqlalchemy.org/en/latest/orm/mapped_attributes.html#synonyms) for convenience. Flask.Marshmallow raises an `AttributeError` exception when a ModelSchema that uses this class is defined.

```
class Department(Model):
    """Represents a department."""

    MAXLEN_NAME = 255

    name = Column(
        String(MAXLEN_NAME),
        nullable=False,
        unique=True,
        index=True
    )
    department = synonym('name')


class DepartmentSchema(ma.ModelSchema):
    """Schema for Department."""

    class Meta:
        """Meta for Marshmallow-SQLAlchemy."""

        model = Department

```
This causes the following exception:

```
...
  File "devel/gesific/webapp/schemas.py", line 253, in <module>
    class DepartmentSchema(ma.ModelSchema):
  File ".virtualenvs/gesific/lib/python3.5/site-packages/marshmallow/schema.py", line 118, in __new__
    dict_cls=dict_cls
  File ".virtualenvs/gesific/lib/python3.5/site-packages/marshmallow_sqlalchemy/schema.py", line 60, in get_declared_fields
    declared_fields = mcs.get_fields(converter, opts, base_fields, dict_cls)
  File ".virtualenvs/gesific/lib/python3.5/site-packages/marshmallow_sqlalchemy/schema.py", line 94, in get_fields
    dict_cls=dict_cls,
  File ".virtualenvs/gesific/lib/python3.5/site-packages/marshmallow_sqlalchemy/convert.py", line 102, in fields_for_model
    field = base_fields.get(prop.key) or self.property2field(prop)
  File ".virtualenvs/gesific/lib/python3.5/site-packages/marshmallow_sqlalchemy/convert.py", line 124, in property2field
    field_class = field_class or self._get_field_class_for_property(prop)
  File ".virtualenvs/gesific/lib/python3.5/site-packages/marshmallow_sqlalchemy/convert.py", line 185, in _get_field_class_for_property
    column = prop.columns[0]
  File ".virtualenvs/gesific/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 853, in __getattr__
    return self._fallback_getattr(key)
  File ".virtualenvs/gesific/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 831, in _fallback_getattr
    raise AttributeError(key)
AttributeError: columns

```
Forcing the exclusion of the synonym solves the issue, but I think that it would be better if somehow Flask-Marshmallow were able to handle this automatically, either by duplicating the field or by ignoring the synonyms.
diff --git a/tests/conftest.py b/tests/conftest.py
index c734cf8..f6a6fd3 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -5,7 +5,7 @@ import pytest
 import sqlalchemy as sa
 from sqlalchemy.ext.associationproxy import association_proxy
 from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy.orm import sessionmaker, relationship, backref, column_property
+from sqlalchemy.orm import sessionmaker, relationship, backref, column_property, synonym
 from marshmallow import validate
 
 
@@ -118,6 +118,7 @@ def models(Base):
             sa.Integer, sa.ForeignKey(School.id), nullable=True
         )
         current_school = relationship(School, backref=backref("teachers"))
+        curr_school_id = synonym("current_school_id")
 
         substitute = relationship("SubstituteTeacher", uselist=False, backref="teacher")
 
diff --git a/tests/test_sqlalchemy_schema.py b/tests/test_sqlalchemy_schema.py
index a4138ba..da4f827 100644
--- a/tests/test_sqlalchemy_schema.py
+++ b/tests/test_sqlalchemy_schema.py
@@ -219,6 +219,31 @@ def test_passing_table_to_auto_field(models, teacher):
     }
 
 
+# https://github.com/marshmallow-code/marshmallow-sqlalchemy/issues/190
+def test_auto_schema_skips_synonyms(models):
+    class TeacherSchema(SQLAlchemyAutoSchema):
+        class Meta:
+            model = models.Teacher
+            include_fk = True
+
+    schema = TeacherSchema()
+    assert "current_school_id" in schema.fields
+    assert "curr_school_id" not in schema.fields
+
+
+def test_auto_field_works_with_synonym(models):
+    class TeacherSchema(SQLAlchemyAutoSchema):
+        class Meta:
+            model = models.Teacher
+            include_fk = True
+
+        curr_school_id = auto_field()
+
+    schema = TeacherSchema()
+    assert "current_school_id" in schema.fields
+    assert "curr_school_id" in schema.fields
+
+
 class TestAliasing:
     @pytest.fixture
     def aliased_schema(self, models):

pip install -e .[dev]
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
cachetools==5.5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
cfgv==3.3.1
chardet==5.2.0
colorama==0.4.6
distlib==0.3.9
entrypoints==0.3
filelock==3.12.2
flake8==3.7.9
flake8-bugbear==20.1.4
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
greenlet==3.1.1
identify==2.5.24
importlib-metadata==6.7.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
marshmallow==3.19.0
-e git+https://github.com/marshmallow-code/marshmallow-sqlalchemy.git@00f08781a06b62f29e412d08432ac0e55e806939#egg=marshmallow_sqlalchemy
mccabe==0.6.1
mock==5.2.0
nodeenv==1.9.1
packaging==24.0
platformdirs==4.0.0
pluggy==1.2.0
pre-commit==2.21.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.5.0
pyflakes==2.1.1
pyproject-api==1.5.3
pytest==7.1.2
pytest-lazy-fixture==0.6.3
PyYAML==6.0.1
SQLAlchemy==2.0.40
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
tox==4.8.0
typing_extensions==4.7.1
virtualenv==20.26.6
zipp @ file:///croot/zipp_1672387121353/work

name: marshmallow-sqlalchemy
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - cachetools==5.5.2
      - cfgv==3.3.1
      - chardet==5.2.0
      - colorama==0.4.6
      - distlib==0.3.9
      - entrypoints==0.3
      - filelock==3.12.2
      - flake8==3.7.9
      - flake8-bugbear==20.1.4
      - greenlet==3.1.1
      - identify==2.5.24
      - importlib-metadata==6.7.0
      - marshmallow==3.19.0
      - mccabe==0.6.1
      - mock==5.2.0
      - nodeenv==1.9.1
      - packaging==24.0
      - platformdirs==4.0.0
      - pluggy==1.2.0
      - pre-commit==2.21.0
      - pycodestyle==2.5.0
      - pyflakes==2.1.1
      - pyproject-api==1.5.3
      - pytest-lazy-fixture==0.6.3
      - pyyaml==6.0.1
      - sqlalchemy==2.0.40
      - tox==4.8.0
      - typing-extensions==4.7.1
      - virtualenv==20.26.6
prefix: /opt/conda/envs/marshmallow-sqlalchemy

tests/test_sqlalchemy_schema.py::test_dump_with_relationships[sqla_auto_model_schema_with_relationships] tests/test_sqlalchemy_schema.py::test_dump_with_foreign_keys[sqla_auto_model_schema_with_fks] tests/test_sqlalchemy_schema.py::TestModelInstanceDeserialization::test_load[sqla_auto_schema_class] tests/test_sqlalchemy_schema.py::TestModelInstanceDeserialization::test_load_transient
tests/test_sqlalchemy_schema.py::test_auto_schema_skips_synonyms tests/test_sqlalchemy_schema.py::test_auto_field_works_with_synonym
tests/test_sqlalchemy_schema.py::test_dump_with_relationships[sqla_schema_with_relationships] tests/test_sqlalchemy_schema.py::test_dump_with_foreign_keys[sqla_schema_with_fks] tests/test_sqlalchemy_schema.py::test_table_schema_dump tests/test_sqlalchemy_schema.py::test_load[sqla_schema_with_fks] tests/test_sqlalchemy_schema.py::test_load[sqla_auto_table_schema] tests/test_sqlalchemy_schema.py::test_load_validation_errors[sqla_schema_with_fks] tests/test_sqlalchemy_schema.py::test_load_validation_errors[sqla_auto_table_schema] tests/test_sqlalchemy_schema.py::test_auto_field_on_plain_schema_raises_error tests/test_sqlalchemy_schema.py::test_cannot_set_both_model_and_table tests/test_sqlalchemy_schema.py::test_passing_model_to_auto_field tests/test_sqlalchemy_schema.py::test_passing_table_to_auto_field tests/test_sqlalchemy_schema.py::TestAliasing::test_passing_column_name[aliased_schema] tests/test_sqlalchemy_schema.py::TestAliasing::test_passing_column_name_and_attribute tests/test_sqlalchemy_schema.py::TestModelInstanceDeserialization::test_load[sqla_schema_class]
CHANGELOG.rst src/marshmallow_sqlalchemy/convert.py
CHANGELOG.rst src/marshmallow_sqlalchemy/convert.py