#33647: bulk_update silently truncating values for size limited fields
-------------------------------------+-------------------------------------
Reporter: jerch | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 4.0
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Simon Charette):
* type: Uncategorized => Bug
* stage: Unreviewed => Accepted
Comment:
I manage to reproduce, this is due to
`requires_casted_case_in_updates=True` on the Postgres backend does a
silent `::varchar(2)` cast on the `CASE` statement.
{{{#!python
diff --git a/tests/queries/test_bulk_update.py
b/tests/queries/test_bulk_update.py
index bc252c21c6..f7244aab72 100644
--- a/tests/queries/test_bulk_update.py
+++ b/tests/queries/test_bulk_update.py
@@ -3,7 +3,7 @@
from django.core.exceptions import FieldDoesNotExist
from django.db.models import F
from django.db.models.functions import Lower
-from django.db.utils import IntegrityError
+from django.db.utils import DataError, IntegrityError
from django.test import TestCase, override_settings, skipUnlessDBFeature
from .models import (
@@ -259,6 +259,14 @@ def test_ipaddressfield(self):
CustomDbColumn.objects.filter(ip_address=ip), models
)
+ def test_charfield_constraint(self):
+ article = Article.objects.create(
+ name="a" * 20, created=datetime.datetime.today()
+ )
+ article.name = "b" * 50
+ with self.assertRaises(DataError):
+ Article.objects.bulk_update([article], ["name"])
+
def test_datetime_field(self):
articles = [
Article.objects.create(name=str(i),
created=datetime.datetime.today())
}}}
We'll need to find an elegant way to cast to `varchar` instead of
`varchar(N)`
--
Ticket URL: <https://code.djangoproject.com/ticket/33647#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/010701802e4266de-93ecd7ce-7a6b-403e-8015-1ce1340a7007-000000%40eu-central-1.amazonses.com.