# Buggy code
def _set_field_values(self, values_map: Dict[str, Any]) -> Set[str]:
    """
    Sets values for fields honoring type transformations and
    return list of fields that were set additionally
    """
    meta = self._meta
    passed_fields = set()

    for key, value in values_map.items():
        if key in meta.fk_fields:
            if hasattr(value, "pk") and not value.pk:
                raise OperationalError(
                    "You should first call .save() on {} before referring to it".format(
                        value
                    )
                )
            relation_field = "{}_id".format(key)
            setattr(self, relation_field, value.pk)
            passed_fields.add(relation_field)
        elif key in meta.fields:
            field_object = meta.fields_map[key]
            if value is None and not field_object.null:
                raise ValueError(
                    "{} is non nullable field, but null was passed".format(key)
                )
            setattr(self, key, field_object.to_python_value(value))
        elif key in meta.db_fields:
            field_object = meta.fields_map[meta.fields_db_projection_reverse[key]]
            if value is None and not field_object.null:
                raise ValueError(
                    "{} is non nullable field, but null was passed".format(key)
                )
            setattr(self, key, field_object.to_python_value(value))
        elif key in meta.backward_fk_fields:
            raise ConfigurationError(
                "You can't set backward relations through init, change related model instead"
            )
        elif key in meta.m2m_fields:
            raise ConfigurationError(
                "You can't set m2m relations through init, use m2m_manager instead"
            )

    return passed_fields


# Traceback (asyncpg.exceptions.PostgresSyntaxError)
DEBUG:asyncio:Using selector: EpollSelector
INFO:tortoise:Tortoise-ORM startup
connections: {'default': {'engine': 'tortoise.backends.asyncpg', 'credentials': {'port': 5432, 'database': 'postgres', 'host': '172.20.0.2', 'user': 'postgres', 'password': 'postgres'}}}
apps: {'models': {'models': ['__main__'], 'default_connection': 'default'}}
DEBUG:db_client:Created connection <asyncpg.connection.Connection object at 0x7fd621f828b8> with params: {'host': '172.20.0.2', 'port': 5432, 'user': 'postgres', 'database': 'postgres'}
DEBUG:db_client:CREATE TABLE IF NOT EXISTS "modela" ("id" UUID NOT NULL PRIMARY KEY); CREATE TABLE IF NOT EXISTS "modelb" ("id" UUID NOT NULL PRIMARY KEY); CREATE TABLE IF NOT EXISTS "modelb_modela" ("modelb_id" UUID NOT NULL REFERENCES "modelb" (id) ON DELETE CASCADE,"modela_id" UUID NOT NULL REFERENCES "modela" (id) ON DELETE CASCADE);
DEBUG:db_client:INSERT INTO "modela" ("id") VALUES ($1): ['075c03a6-b777-4044-876e-d5877478318d']
DEBUG:db_client:INSERT INTO "modelb" ("id") VALUES ($1): ['8a5ad9d6-fc30-4aba-a41b-377595cddb5f']
DEBUG:db_client:SELECT "modelb_id","modela_id" FROM "modelb_modela" WHERE "modelb_id"='8a5ad9d6-fc30-4aba-a41b-377595cddb5f' AND "modela_id"='075c03a6-b777-4044-876e-d5877478318d'
DEBUG:db_client:INSERT INTO "modelb_modela" ("modela_id","modelb_id") VALUES ('075c03a6-b777-4044-876e-d5877478318d','8a5ad9d6-fc30-4aba-a41b-377595cddb5f')
INFO:root:asyncpg result [<Record _backward_relation_key=UUID('075c03a6-b777-4044-876e-d5877478318d') id=UUID('8a5ad9d6-fc30-4aba-a41b-377595cddb5f')>]
DEBUG:db_client:SELECT "id" FROM "modela" WHERE "id"='075c03a6-b777-4044-876e-d5877478318d' LIMIT 2
DEBUG:db_client:SELECT "sq0"."_backward_relation_key" "_backward_relation_key","modelb"."id" "id" FROM "modelb" JOIN (SELECT "modela_id" "_backward_relation_key","modelb_id" "_forward_relation_key" FROM "modelb_modela" WHERE "modela_id" IN (075c03a6-b777-4044-876e-d5877478318d)) "sq0" ON "sq0"."_forward_relation_key"="modelb"."id"
Traceback (most recent call last):
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/asyncpg/client.py", line 63, in translate_exceptions_
return await func(self, *args)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/asyncpg/client.py", line 30, in retry_connection_
return await func(self, *args)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/asyncpg/client.py", line 174, in execute_query
return await connection.fetch(query)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/asyncpg/connection.py", line 421, in fetch
return await self._execute(query, args, 0, timeout)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/asyncpg/connection.py", line 1414, in _execute
query, args, limit, timeout, return_status=return_status)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/asyncpg/connection.py", line 1422, in __execute
return await self._do_execute(query, executor, timeout)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/asyncpg/connection.py", line 1434, in _do_execute
stmt = await self._get_statement(query, None)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/asyncpg/connection.py", line 329, in _get_statement
statement = await self._protocol.prepare(stmt_name, query, timeout)
File "asyncpg/protocol/protocol.pyx", line 163, in prepare
asyncpg.exceptions.PostgresSyntaxError: syntax error at or near "c03a6"

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "main.py", line 50, in <module>
asyncio.run(main())
File "/usr/lib64/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/usr/lib64/python3.7/asyncio/base_events.py", line 584, in run_until_complete
return future.result()
File "main.py", line 47, in main
await a.fetch_related("b_models")
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/models.py", line 422, in fetch_related
await db.executor_class(model=self.__class__, db=db).fetch_for_list([self], *args)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/base/executor.py", line 284, in fetch_for_list
await self._execute_prefetch_queries(instance_list)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/base/executor.py", line 267, in _execute_prefetch_queries
await self._do_prefetch(instance_list, field, related_query)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/base/executor.py", line 259, in _do_prefetch
return await self._prefetch_m2m_relation(instance_id_list, field, related_query)
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/base/executor.py", line 201, in _prefetch_m2m_relation
raw_results = await self.db.execute_query(query.get_sql())
File "/home/nik/.virtualenvs/tortoise-pk-error/lib/python3.7/site-packages/tortoise/backends/asyncpg/client.py", line 65, in translate_exceptions_
raise OperationalError(exc)
tortoise.exceptions.OperationalError: syntax error at or near "c03a6"

# Fixed code
def _set_field_values(self, values_map: Dict[str, Any]) -> Set[str]:
    """
    Sets values for fields honoring type transformations and
    return list of fields that were set additionally
    """
    meta = self._meta
    passed_fields = set()

    for key, value in values_map.items():
        if key in meta.fk_fields:
            if not getattr(value, "_saved_in_db", False):
                raise OperationalError(
                    "You should first call .save() on {} before referring to it".format(
                        value
                    )
                )
            field_object = meta.fields_map[key]
            relation_field = field_object.source_field  # type: str  # type: ignore
            setattr(self, relation_field, value.pk)
            passed_fields.add(relation_field)
        elif key in meta.fields:
            field_object = meta.fields_map[key]
            if value is None and not field_object.null:
                raise ValueError(
                    "{} is non nullable field, but null was passed".format(key)
                )
            setattr(self, key, field_object.to_python_value(value))
        elif key in meta.db_fields:
            field_object = meta.fields_map[meta.fields_db_projection_reverse[key]]
            if value is None and not field_object.null:
                raise ValueError(
                    "{} is non nullable field, but null was passed".format(key)
                )
            setattr(self, key, field_object.to_python_value(value))
        elif key in meta.backward_fk_fields:
            raise ConfigurationError(
                "You can't set backward relations through init, change related model instead"
            )
        elif key in meta.m2m_fields:
            raise ConfigurationError(
                "You can't set m2m relations through init, use m2m_manager instead"
            )

    return passed_fields