#29747 closed Bug (invalid)
UUID in loaddata fixture raise ValidationError on objects having OneToOne relationship (uuid as FK).
Reported by: | stockersky | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 2.1 |
Severity: | Normal | Keywords: | uuid fixture loaddata OneToOne |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Hello,
I was working on my django project with version 2.0.
Today I redeployed my development environment and installed the lastest Django version through pip : 2.1.1
While loading my database fixture to populate it (python manage.py loaddata data_fixture.json), it raised :
Traceback (most recent call last): File "/PROJECTS/SOFTWARES/pvenvs/cvdjango/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 2325, in to_python return uuid.UUID(value) File "/PROJECTS/SOFTWARES/python366/lib/python3.6/uuid.py", line 140, in __init__ raise ValueError('badly formed hexadecimal UUID string') ValueError: badly formed hexadecimal UUID string During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/PROJECTS/SOFTWARES/pvenvs/cvdjango/lib/python3.6/site-packages/django/core/serializers/python.py", line 100, in Deserializer data[Model._meta.pk.attname] = Model._meta.pk.to_python(d.get('pk')) File "/PROJECTS/SOFTWARES/pvenvs/cvdjango/lib/python3.6/site-packages/django/db/models/fields/related.py", line 874, in to_python return self.target_field.to_python(value) File "/PROJECTS/SOFTWARES/pvenvs/cvdjango/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 2330, in to_python params={'value': value}, django.core.exceptions.ValidationError: ["La valeur «\xa020\xa0» n'est pas un UUID valide."] ...................... raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), None) django.core.serializers.base.DeserializationError: Problem installing fixture '/PROJECTS/CODE/cv_project/cv_frontend/fixtures/data_fixture.json': ["La valeur «\xa020\xa0» n'est pas un UUID valide."]: (cv_frontend.PersonalInfo:pk=20) field_value was 'None'
I flushed migrations, dropped/recreate database and ran migrations again. Still had the error...
I could actually still create an object having uuid as PK in the admin console and link other objects to it.
Then I began to delete objects in my fixture file and try to run again loaddata : when I deleted every fixture object that had OneToOne relationship, it passed!!!
I finally rolled back to Django 2.0 and could run the whole fixture with no problem!
Does it sound like a bug?
Change History (9)
comment:1 by , 6 years ago
Type: | Uncategorized → Bug |
---|
comment:2 by , 6 years ago
Description: | modified (diff) |
---|---|
Summary: | Django 2.1.1 : UUID in loaddata fixture raise ValidationError on objects having OneToOne relationship (uuid as FK). → UUID in loaddata fixture raise ValidationError on objects having OneToOne relationship (uuid as FK). |
comment:3 by , 6 years ago
Summary: | UUID in loaddata fixture raise ValidationError on objects having OneToOne relationship (uuid as FK). → Django 2.1.1 : UUID in loaddata fixture raise ValidationError on objects having OneToOne relationship (uuid as FK). |
---|
follow-up: 5 comment:4 by , 6 years ago
comment:5 by , 6 years ago
No, I don't have anything like this in my fixture. I use valid UUID's
Actually, as I tried to use another UUID in my fixture, I noticed the value \xa020\xa0
was always in the message.
follow-up: 7 comment:6 by , 6 years ago
Can you provide a sample project that reproduces the problem?
comment:7 by , 6 years ago
models :
import uuid from django.db import models class MyClass1(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=20) class MyClass2(models.Model): name = models.CharField(max_length=20) myclass1 = models.OneToOneField(MyClass1, on_delete=models.CASCADE, primary_key=True)
Fixture :
[ { "model": "my_app.MyClass1", "pk": "7bc3c004-05d6-4d4d-a70b-cf0507320784", "fields": { "name": "blabla" } }, { "model": "my_app.MyClass2", "pk": "20", "fields": { "name": "blibli", "myclass1": "7bc3c004-05d6-4d4d-a70b-cf0507320784" } } ]
follow-up: 9 comment:8 by , 6 years ago
Component: | Testing framework → Database layer (models, ORM) |
---|---|
Resolution: | → invalid |
Status: | new → closed |
Summary: | Django 2.1.1 : UUID in loaddata fixture raise ValidationError on objects having OneToOne relationship (uuid as FK). → UUID in loaddata fixture raise ValidationError on objects having OneToOne relationship (uuid as FK). |
Bisected to e50add6ca1605dcc06c8c5a5770342779a4d5124, however, it looks like you have invalid fixture data. "pk": "20",
should be a UUID since you have primary_key=True
on the OneToOneField
, shouldn't it?
comment:9 by , 6 years ago
Thanks for pointing out my mistake, Tim!
After fixing it, it works with Django 2.1.1.
Actually, maybe Django 2.0 was too permissive on the fixture because despite my error, it never raised an exception...
Notwithstanding, it didn't create those wrong pk fields on the database side.
My bad, I'm sorry for it.
Do you have the value
\xa020\xa0
in your fixtures? I'm not sure what that's supposed to be but it doesn't look like a valid UUID as the error message suggests.