2016-05-29 10 views
1

Modell zu vergleichen:Filterungseigenschaften von Ursache Fehler

class Thing(db.Model): 
    __tablename__ = 'things' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(128)) 
    type_id = db.Column(db.Integer, db.ForeignKey('types_of_things.id')) 

class TypeOfThing(db.Model): 
    __tablename__ = 'types_of_things' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(64)) 
    number = db.Column(db.Integer) 
    things = db.relationship('Thing', backref='type', lazy='dynamic') 

Versuchen:

Thing.query.join(TypeOfThing).filter_by(Thing.type.number<=1).first() 

Ursache:

AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Thing.type has an attribute 'number'

Versuchen:

Thing.query.join(TypeOfThing).filter_by(number<=1).first() 

Ursache:

NameError: name 'number' is not defined

+1

Der Grund, warum Sie nicht 'Zahl <= 1 'in' filter_by' verwenden können, ist, dass es für die Keyword-Argumente der Regel sucht mit das '=' Zeichen, keine Vergleiche. Sie können 'TypeOfThing.number' verwenden, um den Vergleich als Positionsargument zu übergeben. ('Nummer' darf nicht alleine verwendet werden, da sie nicht definiert ist.) – 2Cubed

+0

@ 2Cubed Ich kann keine Nummer verwenden, weil sie nicht definiert ist, aber warum 'Thing.type.number'-Vergleich einen Fehler verursacht? Außerdem scheint es so zu sein: 'Thing.query.join (TypeOfThing) .filter_by (assembly = 1)' (ohne Vergleich) - 'assembled' ist noch nicht definiert. Ich akzeptiere deine Antwort mit ein bisschen Erklärung. – aryndin

+0

@ 2Cubed, oh, ich dachte 'filter_by' ist ein Alias ​​für' filter' :-) – aryndin

Antwort

1

Scheint, wie ich es tun müssen so:

Thing.query.join(TypeOfThing).filter(TypeOfThing.number<=1).first() 
Verwandte Themen