【发布时间】:2012-07-02 03:15:31
【问题描述】:
我编写了一个名为“库”的 sqlalchemy 模型:
class Library(Base):
__tablename__ = 'library'
id = Column(Integer, primary_key=True)
details = Column(String)
def __init__(self, details):
self.details = details
def __repr__(self):
return u"Library(%s)" % (self.details)
然后,在 views.py 文件中,我写了:
def is_lib_empty():
return len(session.query(Library).all()) <= 0
def populateLib():
new_libs = [Library('one'), Library('two'), Library('three'), Library('four')]
session.add_all(new_libs)
session.commit()
def index(request):
if is_lib_empty():
populateLib()
libs = session.query(Library).all()
return render_to_response('../templates/index.html',{'libs':libs})
然后我运行 python manage.py runserver,它显示了一条错误消息:
__init__() takes exactly 1 argument (2 given)
我应该怎么做才能解决这个问题?
TypeError at /
__init__() takes exactly 1 argument (2 given)
Request Method: GET
Django Version: 1.3.1
Exception Type: TypeError
Exception Value:
__init__() takes exactly 1 argument (2 given)
Exception Location: /cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling/../loose_coupling/with_sqlalchemy/views.py in populateLib, line 25
Python Executable: /sw/bin/python2.7
Python Version: 2.7.2
Python Path:
['/cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling',
'/sw/lib/python27.zip',
'/sw/lib/python2.7',
'/sw/lib/python2.7/plat-darwin',
'/sw/lib/python2.7/plat-mac',
'/sw/lib/python2.7/plat-mac/lib-scriptpackages',
'/sw/lib/python2.7/lib-tk',
'/sw/lib/python2.7/lib-old',
'/sw/lib/python2.7/lib-dynload',
'/sw/lib/python2.7/site-packages',
'/sw/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']
Server time: Sun, 1 Jul 2012 05:50:03 -0500
Environment:
Request Method: GET
Django Version: 1.3.1
Python Version: 2.7.2
Installed Applications:
['loose_coupling.with_sqlalchemy']
Installed Middleware:
('django.middleware.common.CommonMiddleware',)
Traceback:
File "/sw/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling/../loose_coupling/with_sqlalchemy/views.py" in index
39. populateLib()
File "/cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling/../loose_coupling/with_sqlalchemy/views.py" in populateLib
25. new_libs = [Library('one'), Library('two'), Library('three'), Library('four')]
Exception Type: TypeError at /
Exception Value: __init__() takes exactly 1 argument (2 given)
【问题讨论】:
-
请贴出异常的完整回溯,以便我们看到错误的根源!
-
TypeError at / __init__() 只需要 1 个参数(给定 2 个) 请求方法:GET 请求 URL:localhost:8000 Django 版本:1.3.1 异常类型:TypeError 异常值:__init__() 正好1 个参数(给定 2 个)异常位置:/cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling/../loose_coupling/with_sqlalchemy/views.py 在 populateLib 第 25 行 Python 可执行文件:/sw/bin/python2.7 Python版本:2.7.2
-
Python 路径:['/cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling', '/sw/lib/python27.zip', '/sw/lib/python2.7' , '/sw/lib/python2.7/plat-darwin', '/sw/lib/python2.7/plat-mac', '/sw/lib/python2.7/plat-mac/lib-scriptpackages', '/sw/lib/python2.7/lib-tk'、'/sw/lib/python2.7/lib-old'、'/sw/lib/python2.7/lib-dynload'、'/sw/lib /python2.7/site-packages', '/sw/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']
-
@limlim:把它放在问题中,这样我们就可以看到换行符了!
-
@limlim:我怀疑您使用
from <module> import *导入了很多模块,而您使用的Library类不是您认为的类,而是来自其他模块.您能否验证代码行new_libs = [...]中的Library实际上是 your 类(例如,通过在上面放置一个print(Library),它应该读作<class Library from YOURMODULE>)?
标签: django sqlalchemy arguments