summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsaJaeHyukc <wogur981208@gmail.com>2024-09-13 20:07:37 +0900
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-09-16 13:31:06 +0200
commitfd92f247891950bc92369b2457e032ec11f0147d (patch)
treee2c1245d48f40d9e05ed1d64b29cc0664dd57e1b
parent121747fdba5862ac8c4e26ec3b8f597385e9aa05 (diff)
Fixed #34887 -- Added support for unlimited models.CharField on SQLite.
Signed-off-by: saJaeHyukc <wogur981208@gmail.com>
-rw-r--r--django/db/backends/sqlite3/base.py8
-rw-r--r--django/db/backends/sqlite3/features.py1
-rw-r--r--docs/ref/models/fields.txt8
-rw-r--r--docs/releases/5.2.txt4
4 files changed, 18 insertions, 3 deletions
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index c7cf947800..f7b65651b3 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -40,6 +40,12 @@ def adapt_datetime(val):
return val.isoformat(" ")
+def _get_varchar_column(data):
+ if data["max_length"] is None:
+ return "varchar"
+ return "varchar(%(max_length)s)" % data
+
+
Database.register_converter("bool", b"1".__eq__)
Database.register_converter("date", decoder(parse_date))
Database.register_converter("time", decoder(parse_time))
@@ -62,7 +68,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
"BigAutoField": "integer",
"BinaryField": "BLOB",
"BooleanField": "bool",
- "CharField": "varchar(%(max_length)s)",
+ "CharField": _get_varchar_column,
"DateField": "date",
"DateTimeField": "datetime",
"DecimalField": "decimal",
diff --git a/django/db/backends/sqlite3/features.py b/django/db/backends/sqlite3/features.py
index 502d8546e3..669e875b59 100644
--- a/django/db/backends/sqlite3/features.py
+++ b/django/db/backends/sqlite3/features.py
@@ -60,6 +60,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
"""
insert_test_table_with_defaults = 'INSERT INTO {} ("null") VALUES (1)'
supports_default_keyword_in_insert = False
+ supports_unlimited_charfield = True
@cached_property
def django_test_skips(self):
diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt
index 612949ab4a..5266135dd2 100644
--- a/docs/ref/models/fields.txt
+++ b/docs/ref/models/fields.txt
@@ -720,8 +720,8 @@ The default form widget for this field is a :class:`~django.forms.TextInput`.
The maximum length (in characters) of the field. The ``max_length``
is enforced at the database level and in Django's validation using
:class:`~django.core.validators.MaxLengthValidator`. It's required for all
- database backends included with Django except PostgreSQL, which supports
- unlimited ``VARCHAR`` columns.
+ database backends included with Django except PostgreSQL and SQLite, which
+ supports unlimited ``VARCHAR`` columns.
.. note::
@@ -730,6 +730,10 @@ The default form widget for this field is a :class:`~django.forms.TextInput`.
``max_length`` for some backends. Refer to the :doc:`database backend
notes </ref/databases>` for details.
+ .. versionchanged:: 5.2
+
+ Support for unlimited ``VARCHAR`` columns was added on SQLite.
+
.. attribute:: CharField.db_collation
Optional. The database collation name of the field.
diff --git a/docs/releases/5.2.txt b/docs/releases/5.2.txt
index 09d1dff49a..8f969a4b85 100644
--- a/docs/releases/5.2.txt
+++ b/docs/releases/5.2.txt
@@ -223,6 +223,10 @@ Models
expression contains a set-returning function, enforcing subquery evaluation.
This is necessary for many Postgres set-returning functions.
+* :attr:`CharField.max_length <django.db.models.CharField.max_length>` is no
+ longer required to be set on SQLite, which supports unlimited ``VARCHAR``
+ columns.
+
Requests and Responses
~~~~~~~~~~~~~~~~~~~~~~