diff --git a/backend/requirements/base.in b/backend/requirements/base.in
index eac90a9ea..9a4094bdc 100644
--- a/backend/requirements/base.in
+++ b/backend/requirements/base.in
@@ -1,39 +1,39 @@
-Django==3.2.13
-django-cors-headers==3.8.0
-djangorestframework==3.13.1
-djangorestframework-simplejwt==5.2.0
-psycopg2==2.9.1
+Django==3.2.18
+django-cors-headers==3.14.0
+djangorestframework==3.14.0
+djangorestframework-simplejwt==5.2.2
+psycopg2==2.9.5
 Faker==8.11.0
-Twisted==22.1
+Twisted==22.10.0
 gunicorn==20.1.0
-uvicorn[standard]==0.15.0
-websockets==10.3
-requests==2.26.0
-itsdangerous==2.0.1
+uvicorn[standard]==0.20.0
+websockets==10.4
+requests==2.28.2
+itsdangerous==2.1.2
 Pillow==9.0.0
-drf-spectacular==0.21.2
-asgiref==3.4.1
-channels==3.0.4
-channels-redis==3.3.0
-celery[redis]==5.2.3
+drf-spectacular==0.25.1
+asgiref==3.6.0
+channels[daphne]==4.0.0
+channels-redis==4.0.0
+celery[redis]==5.2.7
 django-redis==5.2.0
 django-celery-email==3.0.0
 advocate==1.0.0
 zipp==3.5.0
 unicodecsv==0.14.1
-django-celery-beat==2.2.1
+django-celery-beat==2.4.0
 celery-redbeat==2.0.0
 service-identity==21.1.0
 regex==2021.8.3
 antlr4-python3-runtime==4.9.3
-tqdm==4.62.3
-boto3==1.20.38
+tqdm==4.64.1
+boto3==1.26.83
 django-storages==1.12.3
 django-health-check==3.16.5
-psutil==5.9.0
+psutil==5.9.4
 dj-database-url==0.5.0
-redis==4.1.4
-pysaml2==7.2.1
+redis==4.5.1
+pysaml2==7.4.1
 validators==0.20.0
 requests-oauthlib==1.3.1
 opentelemetry-api==1.15.0
@@ -57,4 +57,3 @@ opentelemetry-semantic-conventions==0.36b0
 opentelemetry-util-http==0.36b0
 Brotli==1.0.9
 loguru==0.6.0
-
diff --git a/backend/requirements/base.txt b/backend/requirements/base.txt
index c2a282a51..8da9df3ab 100644
--- a/backend/requirements/base.txt
+++ b/backend/requirements/base.txt
@@ -6,15 +6,13 @@
 #
 advocate==1.0.0
     # via -r base.in
-aioredis==1.3.1
-    # via channels-redis
 amqp==5.1.1
     # via kombu
 antlr4-python3-runtime==4.9.3
     # via -r base.in
 anyio==3.6.1
-    # via watchgod
-asgiref==3.4.1
+    # via watchfiles
+asgiref==3.6.0
     # via
     #   -r base.in
     #   channels
@@ -22,16 +20,15 @@ asgiref==3.4.1
     #   daphne
     #   django
     #   opentelemetry-instrumentation-asgi
-    #   uvicorn
 async-timeout==4.0.2
-    # via aioredis
+    # via redis
 attrs==22.1.0
     # via
     #   automat
     #   jsonschema
     #   service-identity
     #   twisted
-autobahn==22.7.1
+autobahn==23.1.2
     # via daphne
 automat==20.2.0
     # via twisted
@@ -39,15 +36,15 @@ backoff==2.2.1
     # via opentelemetry-exporter-otlp-proto-http
 billiard==3.6.4.0
     # via celery
-boto3==1.20.38
+boto3==1.26.83
     # via -r base.in
-botocore==1.23.54
+botocore==1.29.83
     # via
     #   boto3
     #   s3transfer
 brotli==1.0.9
     # via -r base.in
-celery[redis]==5.2.3
+celery[redis]==5.2.7
     # via
     #   -r base.in
     #   celery-redbeat
@@ -59,11 +56,11 @@ certifi==2022.9.24
     # via requests
 cffi==1.15.1
     # via cryptography
-channels==3.0.4
+channels[daphne]==4.0.0
     # via
     #   -r base.in
     #   channels-redis
-channels-redis==3.3.0
+channels-redis==4.0.0
     # via -r base.in
 charset-normalizer==2.0.12
     # via requests
@@ -88,19 +85,17 @@ cryptography==38.0.1
     #   pyopenssl
     #   pysaml2
     #   service-identity
-daphne==3.0.2
+daphne==4.0.0
     # via channels
 decorator==5.1.1
     # via validators
 defusedxml==0.7.1
     # via pysaml2
 deprecated==1.2.13
-    # via
-    #   opentelemetry-api
-    #   redis
+    # via opentelemetry-api
 dj-database-url==0.5.0
     # via -r base.in
-django==3.2.13
+django==3.2.18
     # via
     #   -r base.in
     #   channels
@@ -111,17 +106,16 @@ django==3.2.13
     #   django-health-check
     #   django-redis
     #   django-storages
-    #   django-timezone-field
     #   djangorestframework
     #   djangorestframework-simplejwt
     #   drf-spectacular
 django-appconf==1.0.5
     # via django-celery-email
-django-celery-beat==2.2.1
+django-celery-beat==2.4.0
     # via -r base.in
 django-celery-email==3.0.0
     # via -r base.in
-django-cors-headers==3.8.0
+django-cors-headers==3.14.0
     # via -r base.in
 django-health-check==3.16.5
     # via -r base.in
@@ -129,16 +123,16 @@ django-redis==5.2.0
     # via -r base.in
 django-storages==1.12.3
     # via -r base.in
-django-timezone-field==4.2.3
+django-timezone-field==5.0
     # via django-celery-beat
-djangorestframework==3.13.1
+djangorestframework==3.14.0
     # via
     #   -r base.in
     #   djangorestframework-simplejwt
     #   drf-spectacular
-djangorestframework-simplejwt==5.2.0
+djangorestframework-simplejwt==5.2.2
     # via -r base.in
-drf-spectacular==0.21.2
+drf-spectacular==0.25.1
     # via -r base.in
 elementpath==3.0.2
     # via xmlschema
@@ -150,9 +144,7 @@ gunicorn==20.1.0
     # via -r base.in
 h11==0.14.0
     # via uvicorn
-hiredis==2.0.0
-    # via aioredis
-httptools==0.2.0
+httptools==0.5.0
     # via uvicorn
 hyperlink==21.0.0
     # via
@@ -168,7 +160,7 @@ incremental==21.3.0
     # via twisted
 inflection==0.5.1
     # via drf-spectacular
-itsdangerous==2.0.1
+itsdangerous==2.1.2
     # via -r base.in
 jmespath==0.10.0
     # via
@@ -282,8 +274,6 @@ opentelemetry-util-http==0.36b0
     #   opentelemetry-instrumentation-django
     #   opentelemetry-instrumentation-requests
     #   opentelemetry-instrumentation-wsgi
-packaging==21.3
-    # via redis
 pillow==9.0.0
     # via -r base.in
 prompt-toolkit==3.0.31
@@ -292,9 +282,9 @@ protobuf==4.21.12
     # via
     #   googleapis-common-protos
     #   opentelemetry-proto
-psutil==5.9.0
+psutil==5.9.4
     # via -r base.in
-psycopg2==2.9.1
+psycopg2==2.9.5
     # via -r base.in
 pyasn1==0.4.8
     # via
@@ -314,11 +304,9 @@ pyopenssl==22.1.0
     #   ndg-httpsclient
     #   pysaml2
     #   twisted
-pyparsing==3.0.9
-    # via packaging
 pyrsistent==0.18.1
     # via jsonschema
-pysaml2==7.2.1
+pysaml2==7.4.1
     # via -r base.in
 python-crontab==2.6.0
     # via django-celery-beat
@@ -342,15 +330,16 @@ pyyaml==6.0
     # via
     #   drf-spectacular
     #   uvicorn
-redis==4.1.4
+redis==4.5.1
     # via
     #   -r base.in
     #   celery
     #   celery-redbeat
+    #   channels-redis
     #   django-redis
 regex==2021.8.3
     # via -r base.in
-requests==2.26.0
+requests==2.28.2
     # via
     #   -r base.in
     #   advocate
@@ -359,7 +348,7 @@ requests==2.26.0
     #   requests-oauthlib
 requests-oauthlib==1.3.1
     # via -r base.in
-s3transfer==0.5.2
+s3transfer==0.6.0
     # via boto3
 service-identity==21.1.0
     # via
@@ -370,7 +359,6 @@ six==1.16.0
     #   advocate
     #   automat
     #   click-repl
-    #   pysaml2
     #   python-dateutil
     #   service-identity
 sniffio==1.3.0
@@ -381,18 +369,20 @@ tenacity==8.1.0
     # via celery-redbeat
 text-unidecode==1.3
     # via faker
-tqdm==4.62.3
+tqdm==4.64.1
     # via -r base.in
-twisted[tls]==22.1.0
+twisted[tls]==22.10.0
     # via
     #   -r base.in
     #   daphne
-txaio==22.2.1
+txaio==23.1.1
     # via autobahn
 typing-extensions==4.4.0
     # via
     #   opentelemetry-sdk
     #   twisted
+tzdata==2022.7
+    # via django-celery-beat
 unicodecsv==0.14.1
     # via -r base.in
 uritemplate==4.1.1
@@ -402,7 +392,7 @@ urllib3==1.26.12
     #   advocate
     #   botocore
     #   requests
-uvicorn[standard]==0.15.0
+uvicorn[standard]==0.20.0
     # via -r base.in
 uvloop==0.17.0
     # via uvicorn
@@ -413,11 +403,11 @@ vine==5.0.0
     #   amqp
     #   celery
     #   kombu
-watchgod==0.8.2
+watchfiles==0.18.1
     # via uvicorn
 wcwidth==0.2.5
     # via prompt-toolkit
-websockets==10.3
+websockets==10.4
     # via
     #   -r base.in
     #   uvicorn
diff --git a/backend/requirements/dev.txt b/backend/requirements/dev.txt
index 420257ab2..5ff25df83 100644
--- a/backend/requirements/dev.txt
+++ b/backend/requirements/dev.txt
@@ -1,12 +1,12 @@
 #
-# This file is autogenerated by pip-compile
+# This file is autogenerated by pip-compile with python 3.9
 # To update, run:
 #
-#    pip-compile dev.in
+#    pip-compile --output-file=dev.txt dev.in
 #
 argh==0.26.2
     # via -r dev.in
-asgiref==3.4.1
+asgiref==3.6.0
     # via
     #   -c base.txt
     #   django
@@ -25,7 +25,7 @@ autopep8==1.5.7
     #   django-silk
 backcall==0.2.0
     # via ipython
-backports.cached-property==1.0.1
+backports-cached-property==1.0.1
     # via -r dev.in
 bandit==1.7.2
     # via -r dev.in
@@ -59,26 +59,28 @@ coverage[toml]==6.2
 debugpy==1.5.1
     # via -r dev.in
 decorator==5.1.1
-    # via ipython
-django-extensions==3.1.5
-    # via -r dev.in
-django-silk==4.2.0
-    # via -r dev.in
-django-stubs-ext==0.5.0
     # via
-    #   -r dev.in
-    #   django-stubs
-django-stubs==1.12.0
-    # via
-    #   -r dev.in
-    #   djangorestframework-stubs
-django==3.2.13
+    #   -c base.txt
+    #   ipython
+django==3.2.18
     # via
     #   -c base.txt
     #   django-extensions
     #   django-silk
     #   django-stubs
     #   django-stubs-ext
+django-extensions==3.1.5
+    # via -r dev.in
+django-silk==4.2.0
+    # via -r dev.in
+django-stubs==1.12.0
+    # via
+    #   -r dev.in
+    #   djangorestframework-stubs
+django-stubs-ext==0.5.0
+    # via
+    #   -r dev.in
+    #   django-stubs
 djangorestframework-stubs==1.7.0
     # via -r dev.in
 execnet==1.9.0
@@ -107,8 +109,6 @@ idna==3.4
     # via
     #   -c base.txt
     #   requests
-importlib-resources==5.10.0
-    # via jsonschema
 iniconfig==1.1.1
     # via pytest
 ipython==8.5.0
@@ -134,23 +134,22 @@ matplotlib-inline==0.1.6
     # via ipython
 mccabe==0.6.1
     # via flake8
-mypy-extensions==0.4.3
-    # via
-    #   -r dev.in
-    #   black
-    #   mypy
 mypy==0.961
     # via
     #   -r dev.in
     #   django-stubs
     #   djangorestframework-stubs
+mypy-extensions==0.4.3
+    # via
+    #   -r dev.in
+    #   black
+    #   mypy
 openapi-schema-validator==0.2.3
     # via openapi-spec-validator
 openapi-spec-validator==0.4.0
     # via -r dev.in
 packaging==21.3
     # via
-    #   -c base.txt
     #   build
     #   pytest
 parso==0.8.3
@@ -167,8 +166,6 @@ pickleshare==0.7.5
     # via ipython
 pip-tools==6.9.0
     # via -r dev.in
-pkgutil-resolve-name==1.3.10
-    # via jsonschema
 platformdirs==2.5.2
     # via black
 pluggy==1.0.0
@@ -203,13 +200,27 @@ pygments==2.13.0
 pyinstrument==4.0.3
     # via -r dev.in
 pyparsing==3.0.9
-    # via
-    #   -c base.txt
-    #   packaging
+    # via packaging
 pyrsistent==0.18.1
     # via
     #   -c base.txt
     #   jsonschema
+pytest==6.2.5
+    # via
+    #   -r dev.in
+    #   pytest-asyncio
+    #   pytest-cov
+    #   pytest-django
+    #   pytest-env
+    #   pytest-forked
+    #   pytest-html
+    #   pytest-icdiff
+    #   pytest-metadata
+    #   pytest-mock
+    #   pytest-ordering
+    #   pytest-split
+    #   pytest-unordered
+    #   pytest-xdist
 pytest-asyncio==0.15.1
     # via -r dev.in
 pytest-cov==3.0.0
@@ -236,22 +247,6 @@ pytest-unordered==0.4.1
     # via -r dev.in
 pytest-xdist==2.3.0
     # via -r dev.in
-pytest==6.2.5
-    # via
-    #   -r dev.in
-    #   pytest-asyncio
-    #   pytest-cov
-    #   pytest-django
-    #   pytest-env
-    #   pytest-forked
-    #   pytest-html
-    #   pytest-icdiff
-    #   pytest-metadata
-    #   pytest-mock
-    #   pytest-ordering
-    #   pytest-split
-    #   pytest-unordered
-    #   pytest-xdist
 python-dateutil==2.8.2
     # via
     #   -c base.txt
@@ -267,7 +262,7 @@ pyyaml==6.0
     #   -c base.txt
     #   bandit
     #   openapi-spec-validator
-requests==2.26.0
+requests==2.28.2
     # via
     #   -c base.txt
     #   coreapi
@@ -349,10 +344,6 @@ wcwidth==0.2.5
     #   prompt-toolkit
 wheel==0.37.1
     # via pip-tools
-zipp==3.5.0
-    # via
-    #   -c base.txt
-    #   importlib-resources
 
 # The following packages are considered to be unsafe in a requirements file:
 # pip
diff --git a/backend/src/baserow/api/utils.py b/backend/src/baserow/api/utils.py
index 10d75c2ab..3e6424580 100644
--- a/backend/src/baserow/api/utils.py
+++ b/backend/src/baserow/api/utils.py
@@ -399,12 +399,13 @@ class DiscriminatorCustomFieldsMappingSerializer:
 
     def __init__(
         self,
-        registry,
-        base_class,
+        registry=None,
+        base_class=None,
         type_field_name="type",
         many=False,
         help_text=None,
         request=False,
+        context=None,
     ):
         self.read_only = False
         self.registry = registry
@@ -414,6 +415,12 @@ class DiscriminatorCustomFieldsMappingSerializer:
         self.help_text = help_text
         self.partial = False
         self.request = request
+        self.context = {} if context is None else context
+
+    # Trick spectacular into thinking we are not a customized list serializer so it
+    # doesn't attempt to use its own customized list serializer extension code which
+    # doesn't work with our custom extension
+    to_representation = serializers.ListSerializer.to_representation
 
 
 class DiscriminatorMappingSerializer:
@@ -422,10 +429,23 @@ class DiscriminatorMappingSerializer:
     class.
     """
 
-    def __init__(self, component_name, mapping, type_field_name="type", many=False):
+    def __init__(
+        self,
+        component_name=None,
+        mapping=None,
+        type_field_name="type",
+        many=False,
+        context=None,
+    ):
         self.read_only = False
         self.component_name = component_name
         self.mapping = mapping
         self.type_field_name = type_field_name
         self.many = many
         self.partial = False
+        self.context = {} if context is None else context
+
+    # Trick spectacular into thinking we are not a customized list serializer so it
+    # doesn't attempt to use its own customized list serializer extension code which
+    # doesn't work with our custom extension
+    to_representation = serializers.ListSerializer.to_representation
diff --git a/backend/src/baserow/config/settings/base.py b/backend/src/baserow/config/settings/base.py
index 8ce809ea1..12abd777b 100644
--- a/backend/src/baserow/config/settings/base.py
+++ b/backend/src/baserow/config/settings/base.py
@@ -55,6 +55,7 @@ ALLOWED_HOSTS = ["localhost", "127.0.0.1"]
 ALLOWED_HOSTS += os.getenv("BASEROW_EXTRA_ALLOWED_HOSTS", "").split(",")
 
 INSTALLED_APPS = [
+    "daphne",
     "django.contrib.auth",
     "django.contrib.contenttypes",
     "django.contrib.sessions",
@@ -63,7 +64,6 @@ INSTALLED_APPS = [
     "rest_framework",
     "rest_framework_simplejwt",
     "corsheaders",
-    "channels",
     "drf_spectacular",
     "djcelery_email",
     "health_check",
diff --git a/changelog/entries/unreleased/refactor/upgrade_django_channels_to_version_4_and_bumped_other_depen.json b/changelog/entries/unreleased/refactor/upgrade_django_channels_to_version_4_and_bumped_other_depen.json
new file mode 100644
index 000000000..488c3daf0
--- /dev/null
+++ b/changelog/entries/unreleased/refactor/upgrade_django_channels_to_version_4_and_bumped_other_depen.json
@@ -0,0 +1,7 @@
+{
+    "type": "refactor",
+    "message": "Upgrade Django Channels to version 4 and bumped other dependencies",
+    "issue_number": null,
+    "bullet_points": [],
+    "created_at": "2023-03-02"
+}