#36370: Model.objects.get() with a None char parameter intermittently doesn't
retrieve row correctly
-------------------------------------+-------------------------------------
Reporter: marcus905 | Type: Bug
Status: new | Component: Database
| layer (models, ORM)
Version: 5.2 | Severity: Normal
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
With the below Models:
{{{
class Bar(models.Model):
id = models.BigAutoField(primary_key=True)
origin = models.CharField(max_length=1, blank=True, null=True)
class Foo(models.Model):
id = models.OneToOneField('Bar', models.DO_NOTHING, db_column='id',
primary_key=True)
date = models.DateField()
origin = models.CharField(max_length=1, blank=True, null=True)
extra_data = models.JSONField(blank=True, null=True)
}}}
executing this:
{{{
bar, _ = Bar.objects.get_or_create(
origin = 'a',
)
origin = None # may be a str with something in, an empty str or
None
try:
foo = Foo.objects.get(id=bar, origin=origin)
except Foo.DoesNotExist:
foo = Foo(
id=bar,
origin=origin,
)
# ...
foo.save()
}}}
If we have None there in origin, the exception apparently gets thrown
intermittently even if there is a row present in the DB and therefore it
tries creating a new row, while if I have an empty string in the origin
field, the get() call works as expected.
I managed to trigger this bug relatively consistently if I try operating
on the same row at in a loop at least 3 times, so if the snippet gets
executed 3 times, the 3rd time it'll try to create the row instead of
retrieving and editing the already present one.
Used DB is Postgres with the GeoDjango and PostGIS in use, but tables are
normal ones without geography.
--
Ticket URL: <https://code.djangoproject.com/ticket/36370>
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 visit
https://groups.google.com/d/msgid/django-updates/01070196a5bf941d-80cc0fa6-3ed5-4873-8c11-b714dbbdfa8d-000000%40eu-central-1.amazonses.com.