#32491: Updating a field based on a JSONField's sub-value adds extra quotes [postgres] -------------------------------------+------------------------------------- Reporter: Baptiste | Owner: nobody Mispelon | Type: Bug | Status: new Component: Database | Version: master layer (models, ORM) | Severity: Normal | Keywords: Triage Stage: | Has patch: 0 Unreviewed | Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -------------------------------------+------------------------------------- Consider the following model: {{{#!py class JSONNamedModel(models.Model): name = models.CharField(max_length=10, blank=True) data = models.JSONField() }}}
The following testcase seems to pass under sqlite but fails under postgres (postgresql version 13.1, psycopg2 version 2.8.6). I haven't tested other backends: {{{#!py class ReproductionTestCase(TestCase): def test_issue_update(self): JSONNamedModel.objects.create(data={'name': 'django'}) JSONNamedModel.objects.update(name=F('data__name')) self.assertQuerysetEqual( JSONNamedModel.objects.all(), ['django'], transform=lambda m: m.name, ) }}} To summarize what happens in the test, if you have an instance with `data={'name': 'django'}` and you do `update(name=F('data__name'))`, you end up with an instance that has `name='"django"'` (the original name with extra double quotes around it). Interestingly, if you start with `django"`, you end up with `"django\""` (the original `"` is backslash-escaped and the whole thing is wrapped by double quotes). Not sure how relevant this is, but while digging into this issue I noticed that the test failure changed somewhat recently (bisected down to commit 8b040e3cbbb2e81420e777afc3ca48a1c8f4dd5a). Before that commit, the error was `django.core.exceptions.FieldError: Joined field references are not permitted in this query` -- Ticket URL: <https://code.djangoproject.com/ticket/32491> 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 django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/052.07fa76dd0643f749a6f1871abb5a5690%40djangoproject.com.