error de django: __init__() toma exactamente 1 argumento (2 dados)

He escrito un modelo de sqlalchemy llamado 'biblioteca':

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)  

Luego, dentro del archivo views.py, he escrito:

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})  

y luego corro Python manage.py runserver, y me muestra un mensaje de error:

__init__() takes exactly 1 argument (2 given)

¿Qué debo hacer para solucionar este problema?

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)

preguntado el 01 de julio de 12 a las 11:07

Publique el seguimiento completo de la excepción para que podamos ver el origen del error. -

TypeError at / __init__() toma exactamente 1 argumento (2 dados) Método de solicitud: GET URL de solicitud: localhost: 8000 Versión de Django: 1.3.1 Tipo de excepción: TypeError Valor de excepción: __init__() toma exactamente 1 argumento (2 dados) Ubicación de la excepción: /cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling/../loose_coupling/with_sqlalchemy/views .py en populateLib, línea 25 Ejecutable de Python: /sw/bin/python2.7 Versión de Python: 2.7.2 -

Ruta de Python: ['/cs/wetlab/Limor/workspace/Yeasti/Yeasti/loose_coupling', '/sw/lib/python27.zip', '/sw/lib/python2.7', '/sw/lib/python2.7 .2.7/plat-darwin', '/sw/lib/python2.7/plat-mac', '/sw/lib/python2.7/plat-mac/lib-scriptpackages', '/sw/lib/python2.7. 2.7/lib-tk', '/sw/lib/python2.7/lib-old', '/sw/lib/python2.7/lib-dynload', '/sw/lib/python0.6/site-packages ', '/sw/lib/python11/site-packages/setuptools-2.7cXNUMX-pyXNUMX.egg-info'] -

@limlim: ¡Ponlo en la pregunta para que podamos ver los saltos de línea! -

@limlim: sospecho que está importando muchos módulos usando from <module> import *, y la Library La clase que está utilizando no es la que cree que es, sino que proviene de algún otro módulo. ¿Puedes verificar eso? Library en la línea de código new_libs = [...] es en realidad tu clase (por ejemplo, poniendo un print(Library) arriba, que debería leerse como <class Library from YOURMODULE>)? -

1 Respuestas

ACTUALIZACIÓN:

Siempre puede usar el constructor predeterminado, usando argumentos de palabras clave:

Library(details='some details')

como se describe en http://docs.sqlalchemy.org/en/rel_0_7/orm/tutorial.html

Esto es compatible con el constructor predeterminado, no es necesario anularlo. De todos modos, su código debería funcionar, a menos que haya alguna anulación en alguna parte ...

Respondido 01 Jul 12, 12:07

He cometido un error al copiar el código aquí. La línea correcta es: new_libs = [Library('one'), Library('two'), Library('tres'), Library('four')], y sigue sin funcionar. límite

Vale, el error dice que init espera 1 argumento (auto). Como se ve en su código, también espera 'detalles'. ¿Es este el código real para el modelo de biblioteca? - tisho

He actualizado la respuesta. No hay necesidad de anular el init método, admite pasar valores de columna como argumentos de palabras clave. Pero de todos modos, su código parece ser válido ... No tengo idea de qué está mal, al menos en el tutorial hay un ejemplo similar ... - tisho

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.