Opened 7 years ago

Closed 6 years ago

#8916 closed (invalid)

admin auth change password not working

Reported by: ask@… Owned by: nobody
Component: contrib.admin Version: 1.1-beta
Severity: Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description (last modified by kmtracey)

Trying to access the change password form in auth admin will cause a "ValueError"

Trace is below

Environment:

Request Method: GET
Request URL: http://localhost:8000/admin/auth/user/1/password/
Django Version: 1.0-final-SVN-unknown
Python Version: 2.5.0
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.admin',
 'django.contrib.databrowse',
 'pressDB.press',
 'pressDB.ext']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.middleware.doc.XViewMiddleware')


Traceback:
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/sites.py" in root
  158.                 return self.model_page(request, *url.split('/', 2))
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/sites.py" in model_page
  177.         return admin_obj(request, rest_of_url)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/options.py" in __call__
  197.             return self.change_view(request, unquote(url))
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/transaction.py" in _commit_on_success
  238.                 res = func(*args, **kw)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/contrib/admin/options.py" in change_view
  557.             obj = model._default_manager.get(pk=object_id)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/manager.py" in get
  93.         return self.get_query_set().get(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/query.py" in get
  297.         clone = self.filter(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/query.py" in filter
  483.         return self._filter_or_exclude(False, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/query.py" in _filter_or_exclude
  501.             clone.query.add_q(Q(*args, **kwargs))
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/sql/query.py" in add_q
  1224.                             can_reuse=used_aliases)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/sql/query.py" in add_filter
  1167.         self.where.add((alias, col, field, lookup_type, value), connector)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/sql/where.py" in add
  48.                 params = field.get_db_prep_lookup(lookup_type, value)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/fields/__init__.py" in get_db_prep_lookup
  202.             return [self.get_db_prep_value(value)]
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/db/models/fields/__init__.py" in get_db_prep_value
  353.         return int(value)

Exception Type: ValueError at /admin/auth/user/1/password/
Exception Value: invalid literal for int() with base 10: '1/password'

Attachments (1)

change password form ERROR.PNG (75.3 KB) - added by liybrn 6 years ago.
when click "change password form", Wrong

Download all attachments as: .zip

Change History (17)

comment:1 Changed 7 years ago by ask@…

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to invalid
  • Status changed from new to closed

No error, i just need to think

comment:2 Changed 6 years ago by django@…

  • Component changed from Authentication to django.contrib.admin
  • Resolution invalid deleted
  • Status changed from closed to reopened

I am having the same problem on both 1.0 and trunk.

comment:3 Changed 6 years ago by kmtracey

  • Description modified (diff)

comment:4 Changed 6 years ago by kmtracey

  • Resolution set to worksforme
  • Status changed from reopened to closed

Really the exact same error with the exact same traceback? Because the original poster seemed to come to the conclusion it was a user error. And I can do a get on the change password form in admin using current trunk, so there's something different about what you are doing. Please elaborate on how you have configured things and what exact error you get, including traceback.

comment:5 Changed 6 years ago by django@…

  • Resolution worksforme deleted
  • Status changed from closed to reopened

Sure looks the same to me. The new admin seems to work fine for me otherwise. My regular password changing forms work fine, btw.

Traceback (most recent call last):

File "/home/dynnetwork/lib/python2.5/django/core/handlers/base.py", line 86, in get_response

response = callback(request, *callback_args, callback_kwargs)

File "/home/dynnetwork/lib/python2.5/django/contrib/admin/sites.py", line 157, in root

return self.model_page(request, *url.split('/', 2))

File "/home/dynnetwork/lib/python2.5/django/views/decorators/cache.py", line 44, in _wrapped_view_func

response = view_func(request, *args, kwargs)

File "/home/dynnetwork/lib/python2.5/django/contrib/admin/sites.py", line 176, in model_page

return admin_obj(request, rest_of_url)

File "/home/dynnetwork/lib/python2.5/django/contrib/admin/options.py", line 197, in call

return self.change_view(request, unquote(url))

File "/home/dynnetwork/lib/python2.5/django/db/transaction.py", line 238, in _commit_on_success

res = func(*args, kw)

File "/home/dynnetwork/lib/python2.5/django/contrib/admin/options.py", line 548, in change_view

obj = model._default_manager.get(pk=object_id)

File "/home/dynnetwork/lib/python2.5/django/db/models/manager.py", line 93, in get

return self.get_query_set().get(*args, kwargs)

File "/home/dynnetwork/lib/python2.5/django/db/models/query.py", line 303, in get

clone = self.filter(*args, kwargs)

File "/home/dynnetwork/lib/python2.5/django/db/models/query.py", line 489, in filter

return self._filter_or_exclude(False, *args, kwargs)

File "/home/dynnetwork/lib/python2.5/django/db/models/query.py", line 507, in _filter_or_exclude

clone.query.add_q(Q(*args, kwargs))

File "/home/dynnetwork/lib/python2.5/django/db/models/sql/query.py", line 1248, in add_q

can_reuse=used_aliases)

File "/home/dynnetwork/lib/python2.5/django/db/models/sql/query.py", line 1191, in add_filter

self.where.add((alias, col, field, lookup_type, value), connector)

File "/home/dynnetwork/lib/python2.5/django/db/models/sql/where.py", line 48, in add

params = field.get_db_prep_lookup(lookup_type, value)

File "/home/dynnetwork/lib/python2.5/django/db/models/fields/init.py", line 202, in get_db_prep_lookup

return [self.get_db_prep_value(value)]

File "/home/dynnetwork/lib/python2.5/django/db/models/fields/init.py", line 353, in get_db_prep_value

return int(value)

ValueError: invalid literal for int() with base 10: '12/password'

comment:6 Changed 6 years ago by kmtracey

For future reference please enclose traceback in triple braces ({{{ }}}) so they format properly.

Pity the original poster did not explain what was they did to cause this error, because you seem to have done the same thing. Have you done something to customize the Admin handling for the User object? Because the traceback shows you are calling into the ModelAdmin __call__ function in django/contrib/admin/options.py instead of the one for UserAdmin in django/contrib/auth/admin.py.

Really, this is not a bug in Django, this works out of the box. You've done something with your config to cause this though I'm not sure exactly what. It's really more properly pursued on django-users but it'd be nice to get a resolution noted in this ticket as to how users can cause this. So, please share more details of your config, particularly any admin.site.register calls you have.

comment:7 Changed 6 years ago by benshapiro

Aha! I think we're on to something here. I had the following:

from spackle.spackle1.models import *
from django.contrib import admin

admin.site.register(School)
admin.site.register(Cohort)
admin.site.register(PersonAggregation)
admin.site.register(Course)

class PersonInline(admin.StackedInline):
	model=Person
	max_num=1
	extra=1
	
class UserOptions(admin.ModelAdmin):
	inlines = [PersonInline,]

admin.site.unregister(User)
admin.site.register(User, UserOptions)

admin.site.register(Person)

It works fine, now that I've taken out the UserOptions stuff.

So, what's the trick in newforms admin to doing what I'm trying to do here? Is there a recommended way to do this?

Ben

comment:8 Changed 6 years ago by kmtracey

I assume you're supposed to add:

from django.contrib.auth.admin import UserAdmin

and change:

class UserOptions(admin.ModelAdmin):

to

class UserOptions(UserAdmin):

That way your customized User admin doesn't lose the code already in UserAdmin, you just override or add what you want.

comment:9 Changed 6 years ago by mtredinnick

  • Resolution set to invalid
  • Status changed from reopened to closed

I agree with Karen; there's no Django bug here. Subclassing has to be done carefully.

(Karen: if there's some other reason you've left this open, please reopen. Looks like the reported problem is a non-issue, though).

comment:10 Changed 6 years ago by aaron@…

I am getting this same error on 2 unrelated sites I just recently upgraded to django 1.0. I don't have any admin class registered with my user model on either site, only:

admin_site = admin.AdminSite()
admin_site.register(User)

I tried importing the UserAdmin as recommended above and registering with the User model to the admin site, but I am still getting the error described above on 2 sites I've tested now:

Environment:

Request Method: GET
Request URL: http://aaronfay.ca/admin/auth/user/1/password/
Django Version: 1.0-final-SVN-unknown
Python Version: 2.5.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.comments',
 'django.contrib.contenttypes',
 'django.contrib.markup',
 'django.contrib.sessions',
 'django.contrib.sites',
 'common',
 'region',
 'profile',
 'tagging']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.middleware.doc.XViewMiddleware',
 'middleware.StatsMiddleware')


Traceback:
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/core/handlers/base.py" in get_response
  81.                 response = middleware_method(request, callback, callback_args, callback_kwargs)
File "/home/aaronfay/webapps/aaronfay/aaronfay/middleware.py" in process_view
  20.         response = view_func(request, *view_args, **view_kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/sites.py" in root
  158.                 return self.model_page(request, *url.split('/', 2))
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/sites.py" in model_page
  177.         return admin_obj(request, rest_of_url)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/options.py" in __call__
  197.             return self.change_view(request, unquote(url))
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/transaction.py" in _commit_on_success
  238.                 res = func(*args, **kw)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/contrib/admin/options.py" in change_view
  557.             obj = model._default_manager.get(pk=object_id)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/manager.py" in get
  93.         return self.get_query_set().get(*args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/query.py" in get
  297.         clone = self.filter(*args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/query.py" in filter
  483.         return self._filter_or_exclude(False, *args, **kwargs)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/query.py" in _filter_or_exclude
  501.             clone.query.add_q(Q(*args, **kwargs))
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/sql/query.py" in add_q
  1224.                             can_reuse=used_aliases)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/sql/query.py" in add_filter
  1167.         self.where.add((alias, col, field, lookup_type, value), connector)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/sql/where.py" in add
  48.                 params = field.get_db_prep_lookup(lookup_type, value)
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/fields/__init__.py" in get_db_prep_lookup
  202.             return [self.get_db_prep_value(value)]
File "/home/aaronfay/webapps/aaronfay/lib/python2.5/django/db/models/fields/__init__.py" in get_db_prep_value
  353.         return int(value)

Exception Type: ValueError at /admin/auth/user/1/password/
Exception Value: invalid literal for int() with base 10: '1/password'

I'm not certain I should reopen the ticket, but I wanted to let you know I am getting the error also. The 2 sites I tested are on 2 separate servers, both with Django 1.0 release.

comment:11 Changed 6 years ago by brosner

You are not showing how you registered with UserAdmin. The code you displayed that you *only* have is wrong. That uses a default ModelAdmin which will lead to that error.

Changed 6 years ago by liybrn

when click "change password form", Wrong

comment:12 Changed 6 years ago by donkeyhotty

Hi, I'm leaving this ticket closed because I'm a complete newb, and I don't have the experience to figure out whether this is my fault or not. But for what it's worth I seem to have exactly the same problem as a few other people here. Traceback is below. It's what I get when I click the "change password form" link in the Django Administration when editing a User. Besides adding

admin.site.register(User)

admin.site.register(Group)

to the admin.py in my app, I haven't done anything else to monkey with User. At the top of the same file, I import:

from django.contrib import admin

from models import *

from datetime import datetime

from django.contrib.auth.models import Group, User

That's it.

After googling, I've found that if I create a password in the Python interpreter like this:

import md5


md5.new('test').hexdigest()


'098f6bcd4621d373cade4e832627b4f6'

and then paste 098f6bcd4621d373cade4e832627b4f6 into the field, when I come back after saving it, it's been converted to a sha encrypted password and I can log in successfully with the new password. But a) this isn't feasible for regular users of the admin panel, and b) the "change password form" link remains broken in any case.

My apologies in advance if I've left something important out.

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/admin/auth/user/2/password/
Django Version: 1.1 pre-alpha SVN-9613
Python Version: 2.5.2
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.admin',
 'django.contrib.flatpages',
 'd_utilities.oofle',
 'adminStuff']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware')


Traceback:
File "C:\Python25\lib\site-packages\django\core\handlers\base.py" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File "C:\Python25\lib\site-packages\django\contrib\admin\sites.py" in root
  157.                 return self.model_page(request, *url.split('/', 2))
File "C:\Python25\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)
File "C:\Python25\lib\site-packages\django\contrib\admin\sites.py" in model_page
  176.         return admin_obj(request, rest_of_url)
File "C:\Python25\lib\site-packages\django\contrib\admin\options.py" in __call__
  197.             return self.change_view(request, unquote(url))
File "C:\Python25\lib\site-packages\django\db\transaction.py" in _commit_on_success
  238.                 res = func(*args, **kw)
File "C:\Python25\lib\site-packages\django\contrib\admin\options.py" in change_view
  548.             obj = model._default_manager.get(pk=object_id)
File "C:\Python25\lib\site-packages\django\db\models\manager.py" in get
  93.         return self.get_query_set().get(*args, **kwargs)
File "C:\Python25\lib\site-packages\django\db\models\query.py" in get
  303.         clone = self.filter(*args, **kwargs)
File "C:\Python25\lib\site-packages\django\db\models\query.py" in filter
  489.         return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Python25\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
  507.             clone.query.add_q(Q(*args, **kwargs))
File "C:\Python25\lib\site-packages\django\db\models\sql\query.py" in add_q
  1255.                             can_reuse=used_aliases)
File "C:\Python25\lib\site-packages\django\db\models\sql\query.py" in add_filter
  1198.         self.where.add((alias, col, field, lookup_type, value), connector)
File "C:\Python25\lib\site-packages\django\db\models\sql\where.py" in add
  48.                 params = field.get_db_prep_lookup(lookup_type, value)
File "C:\Python25\lib\site-packages\django\db\models\fields\__init__.py" in get_db_prep_lookup
  202.             return [self.get_db_prep_value(value)]
File "C:\Python25\lib\site-packages\django\db\models\fields\__init__.py" in get_db_prep_value
  353.         return int(value)

Exception Type: ValueError at /admin/auth/user/2/password/
Exception Value: invalid literal for int() with base 10: '2/password'

comment:13 Changed 6 years ago by kmtracey

Replying to donkeyhotty:

Hi, I'm leaving this ticket closed because I'm a complete newb, and I don't have the experience to figure out whether this is my fault or not. But for what it's worth I seem to have exactly the same problem as a few other people here. Traceback is below. It's what I get when I click the "change password form" link in the Django Administration when editing a User. Besides adding

admin.site.register(User)

admin.site.register(Group)

Why are you registering User and Group to admin in your own app? If you use admin.autodiscover() in your urls.py then User and Group will be registered with the custom admin models defined for them by default. If you are overriding them in some way you need to inherit from the cusom models defined in /django/contrib/auth/admin.py, not ModelAdmin, because the password stuff, for instance, is added in the custom model. So the problem is resulting because you are including 'admin.site.register(User)' in your own code. That registration will not support changing passwords as the default one set up in django/contrib/auth/admin.py does.

If you have follow-up questions, the django-users list is a better place for questions like this.

comment:14 Changed 6 years ago by davenaff

I stumbled across this ticket a little bit ago and finally came back to fix my problem.

For future reference:

Before (code that generated this error):

from django.contrib import admin

class MyUserAdmin(admin.ModelAdmin):
    list_display = ('username', 'email', 'date_joined', 'last_login', 'is_active')
    form = MyUserAdminForm

After (code that works fine):

from django.contrib.auth.admin import UserAdmin 

class MyUserAdmin(UserAdmin):
    list_display = ('username', 'email', 'date_joined', 'last_login', 'is_active')
    form = MyUserAdminForm

I hope others find this helpful.

comment:15 Changed 6 years ago by phu

  • Resolution invalid deleted
  • Status changed from closed to reopened
  • Version changed from 1.0 to 1.1-beta-1

This error is reproducible in 1.1 beta 1 (it is not a result of the aforementioned subclassing missteps):

  1. On a basic installation, enable the admin interface, set up a basic DB (sqlite3 and mysql tested, should not matter), and sync.
  2. Create an admin user.
  3. Run runserver; enter the admin interface (obviously that's all that will be available) and edit your previously-created admin user.
  • The 'change password form' link under the Password field (containing the hash) works.
  • The 'Change password' link next to 'Welcome, [username]' in the upper right corner leads to this 'invalid literal' page.

Working:
/admin/auth/user/1/password/
Not working:
/admin/auth/user/1/admin/password_change/

Unfortunately, I don't have time to dig through the admin code, so I don't know what the 'password_change' form looks like... if it's pointing to the same place as the working 'password' link, this may just be a quick template change.

comment:16 Changed 6 years ago by Alex

  • Resolution set to invalid
  • Status changed from reopened to closed

That's because of bug #10061, closing this again.

Note: See TracTickets for help on using tickets.
Back to Top