3

これは私の最初のサンプルコードですmongodb

と接続しようとしてdjangomongodbます。登録部分は正常に完了しましたが、ログインしようとするとエラーページが表示されます。

TypeError at /accounts/login/
id must be an instance of (str, unicode, ObjectId), not type 'int'

私はdjangoユーザー認証を使用していますが、

これは私のURLです url(r'^accounts/login/', 'django.contrib.auth.views.login'),

以下は私の完全なトレースバックです。

TypeError at /admin/profile/
id must be an instance of (str, unicode, ObjectId), not <type 'int'>
Request Method: GET
Request URL:    http://www.myapp.com/accounts/login/
Django Version: 1.3
Exception Type: TypeError
Exception Value:    
id must be an instance of (str, unicode, ObjectId), not <type 'int'>
Exception Location: /home/sakeer/workspace/entevirtual/lib/python2.7/site-
packages/pymongo-2.4.2-py2.7-linux-x86_64.egg/bson/objectid.py in __validate, line 198
Python Executable:  /home/sakeer/workspace/entevirtual/bin/python
Python Version: 2.7.3
Python Path:    
['/home/sakeer/workspace/enteproject',
 '/home/sakeer/workspace/entevirtual/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
 '/home/sakeer/workspace/entevirtual/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg',
 '/home/sakeer/workspace/entevirtual/lib/python2.7/site-packages/djangotoolbox-0.9.2-py2.7.egg',
 '/home/sakeer/workspace/entevirtual/lib/python2.7/site-packages/django_mongodb_engine-0.4.0-py2.7.egg',
 '/home/sakeer/workspace/entevirtual/lib/python2.7/site-packages/pymongo-2.4.2-py2.7-linux-x86_64.egg',
 '/home/sakeer/workspace/entevirtual/lib/python27.zip',
 '/home/sakeer/workspace/entevirtual/lib64/python2.7',
 '/home/sakeer/workspace/entevirtual/lib64/python2.7/plat-linux2',
 '/home/sakeer/workspace/entevirtual/lib64/python2.7/lib-tk',
 '/home/sakeer/workspace/entevirtual/lib64/python2.7/lib-old',
 '/home/sakeer/workspace/entevirtual/lib64/python2.7/lib-dynload',
 '/usr/lib64/python2.7',
 '/usr/lib/python2.7',
 '/usr/lib64/python2.7/lib-tk',
 '/home/sakeer/workspace/entevirtual/lib/python2.7/site-packages',
 '/home/sakeer/workspace/enteproject/lib',
 '/home/sakeer/workspace/enteproject/lib']

どこに何が欠けているのか

4

1 に答える 1

2

Django のバグのようです。これは、ユーザー ID が常に int であると想定しているため、リレーショナル データベースでは意味があります。Mongodb を使用する場合、キーまたは _id はオブジェクト ID になります。

これには未解決のバグがあり、再びポップアップするようです (たとえば、これhttps://code.djangoproject.com/ticket/14881 ) 。今のところ、django ユーザー アカウントのこのコメント ( https://github.com/pinax/django-user-accounts/issues/103 ) にコメントを追加しました。

修正するにはパッチが必要な場合があります。

奇妙なことに、mongoengineを使用してdjango 1.5で動作しましたが、django 1.6.1にアップグレードした後、問題が再発しました。

于 2014-02-04T18:30:33.167 に答える