2013-11-09 79 views
0

我有一個Flask web應用程序正在處理。我使用ZODB和Flask-ZODB擴展。ZODB:TypeError嘗試添加對象到OOBTree

有我喜歡的DBS創建:

from ZODB.DB import DB 
from ZODB.FileStorage import FileStorage 
from flask.ext.zodb import BTree 
import transaction 

# crea los indices de los principales objetos 
storage = FileStorage('myproject/database/db.fs') 
conn = DB(storage) 
db = conn.open().root() 
for idx in ['usuarios', 'proyectos', 'informes', 'actividades', 'objetivos', 'usuarios']: 
     if not idx in db.keys(): 
      db[idx] = BTree() 

transaction.commit(); 
conn.close(); 

我的模型:

from flask import current_app as app 
from flask.ext.zodb import Object, List, Dict 


class Proyecto(Object): 
    """ 
     Representacion de un proyecto con su informacion general 
     y todos los informes cargados para el mismo, ordenados por numero de informe 
    """ 
    def __init__(self, nombre, lineaTrabajo, presupuesto, organizacion=None, 
       localizacion=None, inicio=None, 
       responsable=None): 
     self.nombre  = nombre 
     self.organizacion = organizacion 
     self.localizacion = localizacion 
     self.inicio  = inicio 
     self.responsable = responsable 
     self.lineaTrabajo = lineaTrabajo 
     self.presupuesto = presupuesto 
     self.informes  = Dict() 

其試圖將一個對象添加到數據庫中的問題IM:

def agregarProyecto(self, proyecto): 
     if not proyecto.nombre in list(self.db['proyectos'].keys()): 
      self.db['proyectos'][proyecto.nombre] = proyecto 

我越來越此錯誤:

Traceback: 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "S:\Fuentes\workspace\Python\flaskapps\venv\lib\site-packages\flask\app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "S:\Fuentes\workspace\Python\flaskapps\myproject-app\myproject\views.py", line 24, in cargarProyecto 
    coleccion.agregarProyecto(form.crearProyecto()) 
    File "S:\Fuentes\workspace\Python\flaskapps\myproject-app\myproject\basedatos.py", line 27, in agregarProyecto 
    self.db['proyectos'][proyecto.nombre] = proyecto 
TypeError: Object has default comparison 

我正在做的教程顯示。我做了一個簡單的測試,而不是存儲一個對象,我存儲了一個字符串,而且工作得很好。有任何想法嗎?

+0

究竟是什麼行是例外?你能包括完整的追溯? –

+0

它在賦值行:self.db ['proyectos'] [proyecto.nombre] = proyecto – Sebastian

回答

1

您的密鑰是None或類似的值;一個沒有自己排序的對象。

確保proyecto.nombre是可訂購類型(例如整數或字符串)。

+0

好吧,我發現它,它實際上是一個錯誤,當從跆拳道Stringfield檢索值,我不得不做somefield.data和我只是建設項目作爲Proyecto(nombre,...)應該是:Proyecto(nombre.data,...) 謝謝!你讓我重新考慮它。 :) – Sebastian

相關問題