SQLAlchemy: 'model' Objekt není callable

hlasů
1

Já používám rámec baňky se sqlalchemy a nemohu dotaz některých souvisejících tabulku výsledek.

Uživatelé> mají mnoho objednávek>

Takže mám objednávku a chci dotaz uživatele, že nařídit patří.

order = Order.query.get( id )
return order.user()

Když říkám to jsem si, že ‚User‘ objekt není disponibilní. Zde je návod, jak se můj vztah definován:

#   ----------------------------------------------------------------------------------
#   MODELS
#   ----------------------------------------------------------------------------------
class User( object ):
    __tablename__ = 'user'

    query = db_session.query_property()

class Order( object ):
    __tablename__ = 'order'

    query = db_session.query_property()

#   ----------------------------------------------------------------------------------
#   MODELS SCHEMA
#   ----------------------------------------------------------------------------------
users_table = Table( 'user', metadata,
    Column( 'id', Integer, primary_key = True ),
    Column( 'username', String( 50 ), unique = True ),
    Column( 'email', String( 50 ), unique = True ),
    Column( 'password', String( 32 ), nullable = False ),
    ...
    mysql_engine = 'InnoDB',
    mysql_charset = 'utf8'
 )

orders_table = Table( 'order', metadata,
    Column( 'id', Integer, primary_key = True ),
    Column( 'user_id', Integer, ForeignKey( 'user.id' ) ),
    Column( 'transaction_id', String( 32 ), unique = True ),
    ...
    mysql_engine = 'InnoDB',
    mysql_charset = 'utf8'
 )

#   ----------------------------------------------------------------------------------
#   MAPPERS
#   ----------------------------------------------------------------------------------
mapper( User, users_table, properties = {
    #   has many
    'orders' : relationship( Order )
} )

mapper( Order, orders_table, properties = {
    #   belongs to
    'user': relationship( User )
} )

Napadá vás, proč se tato chyba?

Položena 22/06/2011 v 02:07
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

orderje předmětem objednávky, a vy jste definovali „user“ vztah jako vlastnost. Proto je vlastnost „user“ bude představovat objekt uživatele. To může být na rozdíl od jiných ORMS jste používali, kde order.userje ve skutečnosti některé funkce, které potřebuje, aby se nazývá k načtení uživatele, nebo snad objekt dotazu, který vrátí uživateli.

Proveďte následující kroky, pokud byste chtěli vidět v akci ...

user = order.user
print type(user)

Všimněte si, že order.uservrátí „User“ instance (nebo v některých případech může vrátit Nonenebo vyvolat výjimku). V tomto případě volání order.user()se bude snažit „volání“ na Userinstanci.

Chybová zpráva proto dává smysl, protože se snažíte volat Userinstance, a Usernebyl definován jako disponibilního objekt.

Odpovězeno 22/06/2011 v 02:24
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more