Example (using Django contrib.auth).
{{{
>>> from django.contrib.auth.models import Group, Permission
>>> group = Group.objects.create()
>>> permission = Permission.objects.first()
>>> print(permission.pk)
1
>>> group.permissions.add(permission.pk)
>>> group.permissions.add(permission.pk)
>>> group.permissions.add(str(permission.pk))
Traceback (most recent call last):
... <snip> ...
IntegrityError: UNIQUE constraint failed: auth_group_permissions.group_id,
auth_group_permissions.permission_id
>>> group.permissions.add(permission.pk)
>>> group.permissions.add(permission.pk)
}}}
Now of course, I assume nobody would do an explicit call to `str()` there,
but if the primary keys come from another input source (like: a URL), it
is not unlikely to expect them to not be the same type as the database
uses.
(seen in 1.9.6, 1.10.1 and master).
Not sure about how to fix it, because the type of the primary key might
not necessarily be an integer.
--
Ticket URL: <https://code.djangoproject.com/ticket/27249>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
* type: Uncategorized => Cleanup/optimization
* stage: Unreviewed => Accepted
Comment:
I guess as long as the performance penalty isn't too large, a possibility
could be to call `Field.to_python()` on the input.
--
Ticket URL: <https://code.djangoproject.com/ticket/27249#comment:1>
* status: new => closed
* resolution: => duplicate
Comment:
Duplicate of #8467.
--
Ticket URL: <https://code.djangoproject.com/ticket/27249#comment:2>