diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 7dbfcdf..68bad76 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -2,6 +2,10 @@
 
 Changelog
 =========
+0.15.14
+-------
+- add F expression support in queryset.update()
+
 0.15.13
 -------
 - Applies default ordering on related queries
diff --git a/docs/query.rst b/docs/query.rst
index b8751ec..edc2358 100644
--- a/docs/query.rst
+++ b/docs/query.rst
@@ -282,3 +282,19 @@ You can view full example here:  :ref:`example_prefetching`
 
 .. autoclass:: tortoise.query_utils.Prefetch
     :members:
+
+
+F expression
+================
+
+An F() object represents the value of a model field. It makes it possible to refer to model field values and perform database operations using them without actually having to pull them out of the database into Python memory.
+
+For example to use ``F`` to update user balance atomic:
+
+.. code-block:: python3
+
+    from tortoise.expressions import F
+    await User.filter(id=1).update(balance = F('balance') - 10)
+    await User.filter(id=1).update(balance = F('balance') + F('award'), award = 0)
+
+Only support ``F`` expressions as part of a ``.update()`` queryset parameter for now.
\ No newline at end of file
diff --git a/tortoise/expressions.py b/tortoise/expressions.py
new file mode 100644
index 0000000..8356186
--- /dev/null
+++ b/tortoise/expressions.py
@@ -0,0 +1,32 @@
+from typing import Union
+
+from pypika import Field
+from pypika.terms import ArithmeticExpression
+
+from tortoise.exceptions import FieldError
+
+
+class F(Field):  # type: ignore
+    @classmethod
+    def resolver_arithmetic_expression(
+        cls,
+        fields_db_projection: dict,
+        arithmetic_expression_or_field: Union[ArithmeticExpression, Field],
+    ):
+        if isinstance(arithmetic_expression_or_field, Field):
+            name = arithmetic_expression_or_field.name
+            try:
+                name = fields_db_projection[name]
+            except KeyError:
+                raise FieldError(f"Field {name} is virtual and can not be updated")
+            arithmetic_expression_or_field.name = name
+        elif isinstance(arithmetic_expression_or_field, ArithmeticExpression):
+            left = arithmetic_expression_or_field.left
+            right = arithmetic_expression_or_field.right
+            arithmetic_expression_or_field.left = cls.resolver_arithmetic_expression(
+                fields_db_projection, left
+            )
+            arithmetic_expression_or_field.right = cls.resolver_arithmetic_expression(
+                fields_db_projection, right
+            )
+        return arithmetic_expression_or_field
diff --git a/tortoise/queryset.py b/tortoise/queryset.py
index 91d0cc3..7b063d1 100644
--- a/tortoise/queryset.py
+++ b/tortoise/queryset.py
@@ -22,10 +22,12 @@ from typing import (
 from pypika import JoinType, Order, Table
 from pypika.functions import Count
 from pypika.queries import QueryBuilder
+from pypika.terms import ArithmeticExpression
 from typing_extensions import Protocol
 
 from tortoise.backends.base.client import BaseDBAsyncClient, Capabilities
 from tortoise.exceptions import DoesNotExist, FieldError, IntegrityError, MultipleObjectsReturned
+from tortoise.expressions import F
 from tortoise.fields.relational import (
     ForeignKeyFieldInstance,
     OneToOneFieldInstance,
@@ -658,7 +660,12 @@ class UpdateQuery(AwaitableQuery):
                     db_field = self.model._meta.fields_db_projection[key]
                 except KeyError:
                     raise FieldError(f"Field {key} is virtual and can not be updated")
-                value = executor.column_map[key](value, None)
+                if not isinstance(value, (F, ArithmeticExpression)):
+                    value = executor.column_map[key](value, None)  # type: ignore
+                else:
+                    value = F.resolver_arithmetic_expression(
+                        self.model._meta.fields_db_projection, value
+                    )
 
             self.query = self.query.set(db_field, value)
 

F Expression for atomic update?
I'm looking for a way to do an atomic update of a field or multiple fields (to increment it)

In Django ORM this is possible using the `F` class, I didn't see anything equivalent in tortoise documentation.

The goal would be to achieve something like this

```
counter = Counter.objects.get_or_create(name = name)
counter.count = F('count') +1
counter.save( update_fields=["count"] )
```

To generate some SQL like

`update counter set count = count + 1`

(In my case I also want to cast in some cases)

`update counter set count = cast(cast(count as integer) + 1) as char)`

Wondering if either of the above are possible yet with tortoise.

diff --git a/tests/fields/test_decimal.py b/tests/fields/test_decimal.py
index 42375f9..50c0f52 100644
--- a/tests/fields/test_decimal.py
+++ b/tests/fields/test_decimal.py
@@ -4,6 +4,7 @@ from tests import testmodels
 from tortoise import fields
 from tortoise.contrib import test
 from tortoise.exceptions import ConfigurationError, IntegrityError
+from tortoise.expressions import F
 from tortoise.functions import Avg, Max, Sum
 
 
@@ -51,6 +52,12 @@ class TestDecimalFields(test.TestCase):
         self.assertEqual(obj.decimal_nodec, 19)
         self.assertEqual(obj.decimal_null, None)
 
+    async def test_f_expression(self):
+        obj0 = await testmodels.DecimalFields.create(decimal=Decimal("1.23456"), decimal_nodec=18.7)
+        await obj0.filter(id=obj0.id).update(decimal=F("decimal") + Decimal("1"))
+        obj1 = await testmodels.DecimalFields.get(id=obj0.id)
+        self.assertEqual(obj1.decimal, Decimal("2.2346"))
+
     async def test_values(self):
         obj0 = await testmodels.DecimalFields.create(decimal=Decimal("1.23456"), decimal_nodec=18.7)
         values = await testmodels.DecimalFields.get(id=obj0.id).values("decimal", "decimal_nodec")
diff --git a/tests/fields/test_float.py b/tests/fields/test_float.py
index cf6b043..ed6367d 100644
--- a/tests/fields/test_float.py
+++ b/tests/fields/test_float.py
@@ -3,6 +3,7 @@ from decimal import Decimal
 from tests import testmodels
 from tortoise.contrib import test
 from tortoise.exceptions import IntegrityError
+from tortoise.expressions import F
 
 
 class TestFloatFields(test.TestCase):
@@ -47,3 +48,9 @@ class TestFloatFields(test.TestCase):
         obj0 = await testmodels.FloatFields.create(floatnum=1.23)
         values = await testmodels.FloatFields.filter(id=obj0.id).values_list("floatnum")
         self.assertEqual(list(values[0]), [1.23])
+
+    async def test_f_expression(self):
+        obj0 = await testmodels.FloatFields.create(floatnum=1.23)
+        await obj0.filter(id=obj0.id).update(floatnum=F("floatnum") + 0.01)
+        obj1 = await testmodels.FloatFields.get(id=obj0.id)
+        self.assertEqual(obj1.floatnum, 1.24)
diff --git a/tests/fields/test_int.py b/tests/fields/test_int.py
index 3f1f867..f05ab9d 100644
--- a/tests/fields/test_int.py
+++ b/tests/fields/test_int.py
@@ -1,6 +1,7 @@
 from tests import testmodels
 from tortoise.contrib import test
 from tortoise.exceptions import IntegrityError
+from tortoise.expressions import F
 
 
 class TestIntFields(test.TestCase):
@@ -52,6 +53,12 @@ class TestIntFields(test.TestCase):
         values = await testmodels.IntFields.get(id=obj0.id).values_list("intnum", flat=True)
         self.assertEqual(values[0], 1)
 
+    async def test_f_expression(self):
+        obj0 = await testmodels.IntFields.create(intnum=1)
+        await obj0.filter(id=obj0.id).update(intnum=F("intnum") + 1)
+        obj1 = await testmodels.IntFields.get(id=obj0.id)
+        self.assertEqual(obj1.intnum, 2)
+
 
 class TestSmallIntFields(test.TestCase):
     async def test_empty(self):
@@ -88,6 +95,12 @@ class TestSmallIntFields(test.TestCase):
         )
         self.assertEqual(values[0], 2)
 
+    async def test_f_expression(self):
+        obj0 = await testmodels.SmallIntFields.create(smallintnum=1)
+        await obj0.filter(id=obj0.id).update(smallintnum=F("smallintnum") + 1)
+        obj1 = await testmodels.SmallIntFields.get(id=obj0.id)
+        self.assertEqual(obj1.smallintnum, 2)
+
 
 class TestBigIntFields(test.TestCase):
     async def test_empty(self):
@@ -126,3 +139,9 @@ class TestBigIntFields(test.TestCase):
         obj0 = await testmodels.BigIntFields.create(intnum=1)
         values = await testmodels.BigIntFields.get(id=obj0.id).values_list("intnum", flat=True)
         self.assertEqual(values[0], 1)
+
+    async def test_f_expression(self):
+        obj0 = await testmodels.BigIntFields.create(intnum=1)
+        await obj0.filter(id=obj0.id).update(intnum=F("intnum") + 1)
+        obj1 = await testmodels.BigIntFields.get(id=obj0.id)
+        self.assertEqual(obj1.intnum, 2)
diff --git a/tests/test_queryset.py b/tests/test_queryset.py
index 84e8ff1..a1c50fe 100644
--- a/tests/test_queryset.py
+++ b/tests/test_queryset.py
@@ -3,6 +3,7 @@ import sys
 from tests.testmodels import IntFields, MinRelation, Tournament
 from tortoise.contrib import test
 from tortoise.exceptions import DoesNotExist, FieldError, IntegrityError, MultipleObjectsReturned
+from tortoise.expressions import F
 
 # TODO: Test the many exceptions in QuerySet
 # TODO: .filter(intnum_null=None) does not work as expected
@@ -216,6 +217,12 @@ class TestQueryset(test.TestCase):
         self.assertEqual(obj.intnum, 2147483646)
         self.assertEqual(obj.intnum_null, None)
 
+    async def test_update_f_expression(self):
+        obj0 = await IntFields.create(intnum=2147483647)
+        await IntFields.filter(id=obj0.id).update(intnum=F("intnum") - 1)
+        obj = await IntFields.get(id=obj0.id)
+        self.assertEqual(obj.intnum, 2147483646)
+
     async def test_update_badparam(self):
         obj0 = await IntFields.create(intnum=2147483647)
         with self.assertRaisesRegex(FieldError, "Unknown keyword argument"):
diff --git a/tests/test_source_field.py b/tests/test_source_field.py
index c986442..0e44bdf 100644
--- a/tests/test_source_field.py
+++ b/tests/test_source_field.py
@@ -6,6 +6,7 @@ This is to test that behaviour doesn't change when one defined source_field para
 """
 from tests.testmodels import SourceFields, StraightFields
 from tortoise.contrib import test
+from tortoise.expressions import F
 
 
 class StraightFieldTests(test.TestCase):
@@ -160,6 +161,12 @@ class StraightFieldTests(test.TestCase):
         obj1a = await self.model.get(eyedee=obj1.eyedee).prefetch_related("rel_to")
         self.assertEqual(list(obj1a.rel_to), [obj2])
 
+    async def test_f_expression(self):
+        obj1 = await self.model.create(chars="aaa")
+        await self.model.filter(eyedee=obj1.eyedee).update(chars=F("blip"))
+        obj2 = await self.model.get(eyedee=obj1.eyedee)
+        self.assertEqual(obj2.chars, "BLIP")
+
 
 class SourceFieldTests(StraightFieldTests):
     def setUp(self) -> None:

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
3.7
tests/requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aiofiles==0.4.0
aiomysql==0.0.20
aiosqlite==0.11.0
alabaster==0.7.12
apipkg==1.5
appdirs==1.4.3
astroid==2.3.3
asyncpg==0.20.1
asynctest==0.13.0
attrs==19.3.0
Babel==2.8.0
bandit==1.6.2
black==19.10b0
bleach==3.1.0
blinker==1.4
certifi==2019.11.28
cffi==1.13.2
chardet==3.0.4
ciso8601==2.1.2
Click==7.0
cloud-sptheme==1.10.0
colorama==0.4.3
coverage==5.0.3
coveralls==1.10.0
cryptography==2.8
docopt==0.6.2
docutils==0.16
entrypoints==0.3
exceptiongroup==1.2.2
execnet==1.7.1
filelock==3.0.12
flake8==3.7.9
flake8-isort==2.8.0
gitdb2==2.0.6
GitPython==3.0.5
green==3.1.0
h11==0.8.1
h2==3.1.1
hpack==3.0.0
hstspreload==2020.2.1
httptools==0.0.13
httpx==0.9.3
Hypercorn==0.9.0
hyperframe==5.2.0
idna==2.8
imagesize==1.2.0
importlib-metadata==1.5.0
iniconfig==2.0.0
isort==4.3.21
itsdangerous==1.1.0
Jinja2==2.11.1
lazy-object-proxy==1.4.3
lxml==4.5.0
MarkupSafe==1.1.1
mccabe==0.6.1
more-itertools==8.2.0
multidict==4.7.4
mypy==0.761
mypy-extensions==0.4.3
nose2==0.9.2
packaging==20.1
pathspec==0.7.0
pbr==5.4.4
pip-tools==4.4.1
pkginfo==1.5.0.1
pluggy==0.13.1
priority==1.3.0
py==1.8.1
pycodestyle==2.5.0
pycparser==2.19
pyflakes==2.1.1
Pygments==2.5.2
pylint==2.4.4
PyMySQL==0.9.2
pyparsing==2.4.6
PyPika==0.35.21
pytest==7.4.4
pytest-asyncio==0.21.2
pytest-cov==2.8.1
pytest-forked==1.1.3
pytest-mock==3.11.1
pytest-xdist==1.31.0
python-rapidjson==0.9.1
pytz==2019.3
PyYAML==5.3
Quart==0.10.0
readme-renderer==24.0
regex==2020.1.8
requests==2.22.0
requests-toolbelt==0.9.1
rfc3986==1.3.2
sanic==19.12.2
six==1.14.0
smmap2==2.0.5
sniffio==1.1.0
snowballstemmer==2.0.0
sortedcontainers==2.1.0
Sphinx==1.8.5
sphinxcontrib-websupport==1.1.2
starlette==0.13.1
stevedore==1.31.0
testfixtures==6.11.0
toml==0.10.0
tomli==2.0.1
-e git+https://github.com/tortoise/tortoise-orm.git@b8d5570e1a6255383161d423941f91ffa472f26f#egg=tortoise_orm
tox==3.14.3
tqdm==4.42.0
twine==1.15.0
typed-ast==1.4.1
typing-extensions==3.7.4.1
ujson==1.35
Unidecode==1.1.1
urllib3==1.25.8
uvicorn==0.11.2
uvloop==0.14.0
virtualenv==16.7.9
wcwidth==0.1.8
webencodings==0.5.1
websockets==8.1
wrapt==1.11.2
wsproto==0.15.0
zipp==2.1.0

name: tortoise-orm
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
  - ca-certificates=2025.2.25=h06a4308_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
  - 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
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aiofiles==0.4.0
      - aiomysql==0.0.20
      - aiosqlite==0.11.0
      - alabaster==0.7.12
      - apipkg==1.5
      - appdirs==1.4.3
      - astroid==2.3.3
      - asyncpg==0.20.1
      - asynctest==0.13.0
      - attrs==19.3.0
      - babel==2.8.0
      - bandit==1.6.2
      - black==19.10b0
      - bleach==3.1.0
      - blinker==1.4
      - certifi==2019.11.28
      - cffi==1.13.2
      - chardet==3.0.4
      - ciso8601==2.1.2
      - click==7.0
      - cloud-sptheme==1.10.0
      - colorama==0.4.3
      - coverage==5.0.3
      - coveralls==1.10.0
      - cryptography==2.8
      - docopt==0.6.2
      - docutils==0.16
      - entrypoints==0.3
      - exceptiongroup==1.2.2
      - execnet==1.7.1
      - filelock==3.0.12
      - flake8==3.7.9
      - flake8-isort==2.8.0
      - gitdb2==2.0.6
      - gitpython==3.0.5
      - green==3.1.0
      - h11==0.8.1
      - h2==3.1.1
      - hpack==3.0.0
      - hstspreload==2020.2.1
      - httptools==0.0.13
      - httpx==0.9.3
      - hypercorn==0.9.0
      - hyperframe==5.2.0
      - idna==2.8
      - imagesize==1.2.0
      - importlib-metadata==1.5.0
      - iniconfig==2.0.0
      - isort==4.3.21
      - itsdangerous==1.1.0
      - jinja2==2.11.1
      - lazy-object-proxy==1.4.3
      - lxml==4.5.0
      - markupsafe==1.1.1
      - mccabe==0.6.1
      - more-itertools==8.2.0
      - multidict==4.7.4
      - mypy==0.761
      - mypy-extensions==0.4.3
      - nose2==0.9.2
      - packaging==20.1
      - pathspec==0.7.0
      - pbr==5.4.4
      - pip-tools==4.4.1
      - pkginfo==1.5.0.1
      - pluggy==0.13.1
      - priority==1.3.0
      - py==1.8.1
      - pycodestyle==2.5.0
      - pycparser==2.19
      - pyflakes==2.1.1
      - pygments==2.5.2
      - pylint==2.4.4
      - pymysql==0.9.2
      - pyparsing==2.4.6
      - pypika==0.35.21
      - pytest==7.4.4
      - pytest-asyncio==0.21.2
      - pytest-cov==2.8.1
      - pytest-forked==1.1.3
      - pytest-mock==3.11.1
      - pytest-xdist==1.31.0
      - python-rapidjson==0.9.1
      - pytz==2019.3
      - pyyaml==5.3
      - quart==0.10.0
      - readme-renderer==24.0
      - regex==2020.1.8
      - requests==2.22.0
      - requests-toolbelt==0.9.1
      - rfc3986==1.3.2
      - sanic==19.12.2
      - six==1.14.0
      - smmap2==2.0.5
      - sniffio==1.1.0
      - snowballstemmer==2.0.0
      - sortedcontainers==2.1.0
      - sphinx==1.8.5
      - sphinxcontrib-websupport==1.1.2
      - starlette==0.13.1
      - stevedore==1.31.0
      - testfixtures==6.11.0
      - toml==0.10.0
      - tomli==2.0.1
      - tox==3.14.3
      - tqdm==4.42.0
      - twine==1.15.0
      - typed-ast==1.4.1
      - typing-extensions==3.7.4.1
      - ujson==1.35
      - unidecode==1.1.1
      - urllib3==1.25.8
      - uvicorn==0.11.2
      - uvloop==0.14.0
      - virtualenv==16.7.9
      - wcwidth==0.1.8
      - webencodings==0.5.1
      - websockets==8.1
      - wrapt==1.11.2
      - wsproto==0.15.0
      - zipp==2.1.0
prefix: /opt/conda/envs/tortoise-orm

tests/fields/test_int.py::TestBigIntFields::test_values_list tests/fields/test_int.py::TestIntFields::test_values_list tests/fields/test_decimal.py::TestDecimalFields::test_f_expression tests/fields/test_float.py::TestFloatFields::test_create tests/test_queryset.py::TestQueryset::test_bad_ordering tests/fields/test_decimal.py::TestDecimalFields::test_max_fields_bad tests/fields/test_float.py::TestFloatFields::test_empty tests/fields/test_decimal.py::TestDecimalFields::test_update tests/fields/test_float.py::TestFloatFields::test_cast_decimal tests/test_queryset.py::TestQueryset::test_duplicate_values tests/fields/test_int.py::TestSmallIntFields::test_values_list tests/fields/test_float.py::TestFloatFields::test_values_list tests/test_queryset.py::TestQueryset::test_all_values tests/fields/test_decimal.py::TestDecimalFields::test_decimal_places_empty tests/fields/test_decimal.py::TestDecimalFields::test_aggregate_avg tests/fields/test_int.py::TestIntFields::test_update tests/test_queryset.py::TestQueryset::test_delete tests/fields/test_decimal.py::TestDecimalFields::test_aggregate_sum tests/fields/test_int.py::TestIntFields::test_create tests/fields/test_int.py::TestIntFields::test_min tests/test_source_field.py::SourceFieldTests::test_get_fk_forward_prefetch_related tests/fields/test_int.py::TestIntFields::test_values tests/fields/test_float.py::TestFloatFields::test_f_expression tests/fields/test_decimal.py::TestDecimalFields::test_max_digits_empty tests/fields/test_int.py::TestSmallIntFields::test_f_expression tests/test_queryset.py::TestQueryset::test_modify_dataset tests/fields/test_decimal.py::TestDecimalFields::test_values tests/fields/test_int.py::TestIntFields::test_cast tests/fields/test_float.py::TestFloatFields::test_update tests/fields/test_int.py::TestBigIntFields::test_f_expression tests/fields/test_int.py::TestBigIntFields::test_values tests/test_source_field.py::StraightFieldTests::test_get_m2m_reverse_fetch_related tests/fields/test_int.py::TestBigIntFields::test_empty tests/test_queryset.py::TestQueryset::test_distinct tests/fields/test_decimal.py::TestDecimalFields::test_empty tests/test_source_field.py::StraightFieldTests::test_get_fk_reverse_prefetch_related tests/test_queryset.py::TestQueryset::test_bad_values_list tests/test_source_field.py::SourceFieldTests::test_get_m2m_forward_prefetch_related tests/fields/test_int.py::TestBigIntFields::test_create tests/test_source_field.py::SourceFieldTests::test_get_m2m_filter tests/fields/test_decimal.py::TestDecimalFields::test_decimal_places_bad tests/test_queryset.py::TestQueryset::test_update_f_expression tests/fields/test_int.py::TestSmallIntFields::test_min tests/fields/test_float.py::TestFloatFields::test_cast_int tests/test_queryset.py::TestQueryset::test_bad_values tests/test_source_field.py::StraightFieldTests::test_get_m2m_forward_fetch_related tests/fields/test_int.py::TestSmallIntFields::test_empty tests/test_queryset.py::TestQueryset::test_update_pk tests/fields/test_int.py::TestIntFields::test_empty tests/test_source_field.py::StraightFieldTests::test_get_by_chars tests/test_source_field.py::SourceFieldTests::test_get_m2m_reverse_prefetch_related tests/test_source_field.py::StraightFieldTests::test_get_fk_reverse_fetch_related tests/test_queryset.py::TestQueryset::test_all_values_list tests/fields/test_int.py::TestIntFields::test_f_expression tests/test_queryset.py::TestQueryset::test_duplicate_values_kw tests/test_source_field.py::SourceFieldTests::test_get_m2m_reverse_fetch_related tests/fields/test_decimal.py::TestDecimalFields::test_create tests/test_source_field.py::StraightFieldTests::test_get_fk_forward_fetch_related tests/fields/test_int.py::TestBigIntFields::test_min tests/fields/test_int.py::TestSmallIntFields::test_create tests/test_queryset.py::TestQueryset::test_async_iter tests/fields/test_int.py::TestSmallIntFields::test_values tests/test_queryset.py::TestQueryset::test_update_badparam tests/fields/test_decimal.py::TestDecimalFields::test_values_list tests/test_queryset.py::TestQueryset::test_all_count tests/test_queryset.py::TestQueryset::test_limit_count tests/fields/test_decimal.py::TestDecimalFields::test_aggregate_max tests/test_queryset.py::TestQueryset::test_all_flat_values_list tests/test_queryset.py::TestQueryset::test_duplicate_values_list tests/fields/test_decimal.py::TestDecimalFields::test_order_by tests/fields/test_int.py::TestBigIntFields::test_cast tests/test_queryset.py::TestQueryset::test_limit_offset_values_list tests/test_source_field.py::StraightFieldTests::test_get_fk_reverse_await tests/test_source_field.py::StraightFieldTests::test_get_fk_reverse_filter tests/fields/test_float.py::TestFloatFields::test_values tests/test_queryset.py::TestQueryset::test_get_or_none tests/test_queryset.py::TestQueryset::test_update_virtual tests/test_source_field.py::SourceFieldTests::test_get_fk_reverse_fetch_related tests/test_queryset.py::TestQueryset::test_offset_count tests/test_source_field.py::SourceFieldTests::test_get_all tests/test_source_field.py::SourceFieldTests::test_f_expression tests/test_source_field.py::SourceFieldTests::test_get_by_chars tests/test_source_field.py::StraightFieldTests::test_f_expression tests/test_source_field.py::SourceFieldTests::test_get_m2m_forward_fetch_related tests/test_source_field.py::StraightFieldTests::test_get_by_pk tests/test_source_field.py::SourceFieldTests::test_get_fk_forward_fetch_related tests/test_source_field.py::StraightFieldTests::test_get_m2m_forward_prefetch_related tests/test_source_field.py::SourceFieldTests::test_get_m2m_reverse_await tests/test_source_field.py::SourceFieldTests::test_get_m2m_forward_await tests/test_queryset.py::TestQueryset::test_update_basic tests/test_queryset.py::TestQueryset::test_first tests/test_source_field.py::SourceFieldTests::test_get_fk_reverse_filter tests/test_source_field.py::StraightFieldTests::test_get_fk_forward_prefetch_related tests/test_source_field.py::SourceFieldTests::test_get_by_pk tests/test_source_field.py::StraightFieldTests::test_get_m2m_filter tests/test_queryset.py::TestQueryset::test_get tests/test_source_field.py::StraightFieldTests::test_get_m2m_forward_await tests/test_source_field.py::SourceFieldTests::test_get_fk_reverse_prefetch_related tests/test_source_field.py::SourceFieldTests::test_get_fk_reverse_async_for tests/test_source_field.py::StraightFieldTests::test_get_fk_reverse_async_for tests/test_source_field.py::SourceFieldTests::test_get_fk_reverse_await tests/test_source_field.py::StraightFieldTests::test_get_m2m_reverse_await tests/test_queryset.py::TestQueryset::test_order_by_bad_value tests/test_queryset.py::TestQueryset::test_limit_offset_values tests/test_queryset.py::TestQueryset::test_duplicate_values_kw_badmap tests/test_queryset.py::TestQueryset::test_many_flat_values_list tests/test_source_field.py::StraightFieldTests::test_get_m2m_reverse_prefetch_related tests/test_source_field.py::StraightFieldTests::test_get_all tests/test_queryset.py::TestQueryset::test_join_count
tortoise/queryset.py CHANGELOG.rst tortoise/expressions.py docs/query.rst
tortoise/queryset.py CHANGELOG.rst tortoise/expressions.py docs/query.rst