diff options
| author | saJaeHyukc <wogur981208@gmail.com> | 2024-09-13 20:07:37 +0900 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-09-16 13:31:06 +0200 |
| commit | fd92f247891950bc92369b2457e032ec11f0147d (patch) | |
| tree | e2c1245d48f40d9e05ed1d64b29cc0664dd57e1b | |
| parent | 121747fdba5862ac8c4e26ec3b8f597385e9aa05 (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.py | 8 | ||||
| -rw-r--r-- | django/db/backends/sqlite3/features.py | 1 | ||||
| -rw-r--r-- | docs/ref/models/fields.txt | 8 | ||||
| -rw-r--r-- | docs/releases/5.2.txt | 4 |
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 ~~~~~~~~~~~~~~~~~~~~~~ |
