У меня есть несколько моделей со следующей структурой:
class Element(models.Model):
api_id = models.UUIDField(null=False, blank=False, default=uuid.uuid4)
....
class Category(models.Model):
api_id = models.UUIDField(null=False, blank=False, default=uuid.uuid4)
....
... и т. Д.
Затем я могу получить объекты из таблицы Element
:
element = Element.objects.first()
element.api_id
UUID('8b278133-b8a2-4540-9dd0-129dd1394fcc')
Element.objects.filter(api_id='8b278133-b8a2-4540-9dd0-129dd1394fcc').count()
1
Пока все хорошо.Ошибка возникает, когда я делаю то же самое для таблицы Category
:
category = Category.objects.first()
category.api_id
UUID('f63b5052-fba1-4ad1-a8ec-673efc673f44')
Category.objects.filter(api_id='f63b5052-fba1-4ad1-a8ec-673efc673f44').count()
0
То же самое происходит, если я преобразую строку в UUID:
Category.objects.filter(api_id=uuid.UUID('f63b5052-fba1-4ad1-a8ec-673efc673f44')).count()
0
Оба запроса преобразуютapi_id
в целое число:
str(Element.objects.filter(api_id='8b278133-b8a2-4540-9dd0-129dd1394fcc').query)
SELECT ... FROM "element" WHERE "element"."api_id" = 8b278133b8a245409dd0129dd1394fcc
str(Category.objects.filter(api_id='f63b5052-fba1-4ad1-a8ec-673efc673f44').query)
SELECT ... FROM "category" WHERE "category"."api_id" = f63b5052fba14ad1a8ec673efc673f44
Обратите внимание, что запрос Element
работает как ожидалось.
И в базе данных оба поля создаются как char (32)
:
CREATE TABLE "element" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "api_id" char(32) NOT NULL, ...)
CREATE TABLE "category" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "api_id" char(32) NOT NULL, ...)
Итак, если все равны для всех таблиц, почему запросы Category
ничего не находят по этому полю uuid
?
Я использую Python 3.5, Django 2.0и SQLite 3. Я тестировал Postgres 9.5, и он работает, как и ожидалось.Это происходит только с SQLite3.