#24712 closed Bug (fixed)
UUIDField doesn't work with SQLite3 and Django 1.8
Reported by: | Thomas Bétrancourt | Owned by: | Abhaya Agarwal |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.8 |
Severity: | Release blocker | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I have the following model with django 1.8:
class File(models.Model): uuid = models.UUIDField(_("id"), primary_key=True, default=uuid.uuid4, editable=False) path = models.CharField(_("path"), max_length=512) parent = models.ForeignKey("Folder", verbose_name=_("parent folder"), related_name="children", blank=True, null=True) absent = models.BooleanField(_("absent"), default=False) class Folder(File): pass class RootFolder(File): description = models.TextField(_("description"), blank=True, null=True) class RootFolderAuthorization(models.Model): user = models.ForeignKey(User, verbose_name=_("user"), related_name="folders", blank=True, null=True) group = models.ForeignKey(Group, verbose_name=_("group"), related_name="folders", blank=True, null=True) folder = models.ForeignKey(RootFolder, verbose_name=_("folder"), related_name="authorizations") can_read = models.BooleanField(_("read access"), default=True) can_write = models.BooleanField(_("write access"), default=False) class IncomingFolder(RootFolder): pass class OutgoingFolder(RootFolder): url = models.CharField(_("url"), max_length=512) username = models.CharField(_("username"), max_length=32, blank=True, null=True) password = models.CharField(_("password"), max_length=128, blank=True, null=True)
When i try to create a new "IncomingFolder", i have the following output:
$ ./manage.py shell Python 2.7.9 (default, Dec 11 2014, 04:42:00) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from ft_node.models import IncomingFolder >>> f = IncomingFolder() >>> f.path = "/var/tmp/in1" >>> f.save() Traceback (most recent call last): File "<console>", line 1, in <module> File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/base.py", line 710, in save force_update=force_update, update_fields=update_fields) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/base.py", line 738, in save_base updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/base.py", line 803, in _save_table forced_update) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/base.py", line 840, in _do_update return update_fields is not None or filtered.exists() File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/query.py", line 586, in exists return self.query.has_results(using=self.db) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/sql/query.py", line 479, in has_results return compiler.has_results() File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 808, in has_results return bool(self.execute_sql(SINGLE)) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 837, in execute_sql cursor.execute(sql, params) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/home/thomas.xxx/Documents/Work/Applications/01-Developpement/file-transfer/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 318, in execute return Database.Cursor.execute(self, query, params) InterfaceError: Error binding parameter 0 - probably unsupported type. >>>
The same model works with MySQL.
I installed django from git master branch (1.9) and it works too.
I tried to install django 1.8 from the stable/1.8.x branch and it doesn't work neither.
Change History (6)
comment:1 by , 10 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 by , 10 years ago
I've trimmed down the models to this configuration:
import uuid from django.db import models class Foo(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) class Bar(Foo): pass class Baz(Bar): pass
With these models, doing Baz().save()
triggers the reported error.
comment:3 by , 10 years ago
Severity: | Normal → Release blocker |
---|
It might be a duplicate of #24698 which was also fixed by the bisected commit.
comment:4 by , 10 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
Note:
See TracTickets
for help on using tickets.
Hi,
I can reproduce the issue and using
git bisect
I found that commit b68212f539f206679580afbfd008e7d329c9cd31 seems to have fixed it (though it doesn't appear related at first sight).Thanks.