#36087: Add system check mentioning contrib.auth is not composite primary key
ready
-------------------------------------+-------------------------------------
Reporter: Jacob Walls | Type:
| Cleanup/optimization
Status: new | Component:
| contrib.auth
Version: dev | 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
-------------------------------------+-------------------------------------
It may not be likely someone would try this, but even so, we might add a
system check or otherwise document that `contrib.auth` is not composite
primary key ready. Then maybe we could refocus this ticket on adding
support.
Adjusting a custom user model like this:
{{{#!diff
diff --git a/tests/auth_tests/models/custom_user.py
b/tests/auth_tests/models/custom_user.py
index 4586e452cd..0647e47ede 100644
--- a/tests/auth_tests/models/custom_user.py
+++ b/tests/auth_tests/models/custom_user.py
@@ -52,6 +52,7 @@ class CustomUserManager(BaseUserManager):
class CustomUser(AbstractBaseUser):
+ pk = models.CompositePrimaryKey("email", "date_of_birth")
email = models.EmailField(verbose_name="email address",
max_length=255, unique=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
}}}
Leads to various failures in contrib.auth that expect to deserialize a pk
by decoding to a bytestring.
The failure I was playing with was a little easier to see by doing this:
{{{#!diff
diff --git a/django/contrib/auth/views.py b/django/contrib/auth/views.py
index a18cfdb347..4c82a4103c 100644
--- a/django/contrib/auth/views.py
+++ b/django/contrib/auth/views.py
@@ -304,7 +304,7 @@ class PasswordResetConfirmView(PasswordContextMixin,
FormView):
user = UserModel._default_manager.get(pk=uid)
except (
TypeError,
- ValueError,
+ # ValueError,
OverflowError,
UserModel.DoesNotExist,
ValidationError,
}}}
Then...
{{{
======================================================================
ERROR: test_confirm_valid_custom_user
(auth_tests.test_views.CustomUserPasswordResetTest.test_confirm_valid_custom_user)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/.../django/tests/auth_tests/test_views.py", line 529, in
test_confirm_valid_custom_user
response = self.client.get(path)
^^^^^^^^^^^^^^^^^^^^^
...
File "/Users/.../django/django/contrib/auth/views.py", line 275, in
dispatch
self.user = self.get_user(kwargs["uidb64"])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/.../django/django/contrib/auth/views.py", line 304, in
get_user
user = UserModel._default_manager.get(pk=uid)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
File "/Users/.../django/django/db/models/lookups.py", line 30, in
__init__
self.rhs = self.get_prep_lookup()
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/.../django/django/db/models/fields/tuple_lookups.py", line
36, in get_prep_lookup
self.check_rhs_is_tuple_or_list()
File "/Users/.../django/django/db/models/fields/tuple_lookups.py", line
45, in check_rhs_is_tuple_or_list
raise ValueError(
ValueError: 'exact' lookup of 'pk' must be a tuple or a list
----------------------------------------------------------------------
Ran 2 tests in 0.056s
FAILED (errors=1)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/36087>
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/0107019458835319-5d3fd0f9-1fb9-4873-849f-e124041abb9f-000000%40eu-central-1.amazonses.com.