2012-07-20 11 views
17

मैं निम्नलिखित 3 वर्गों है है:SQLAlchemy: 'InstrumentedList' ऑब्जेक्ट कोई विशेषता 'फिल्टर'

class Resource: 
    id = Column(Integer, primary_key=True) 
    path = Column(Text) 
    data = Column(Binary) 
    type = Column(Text) 

    def set_resource(self, path, data, type): 
     self.path = path 
     self.data = data 
     self.type = type 

class EnvironmentResource(Base, Resource): 
    __tablename__ = 'environment_resources' 
    parent_id = Column(Integer, ForeignKey('environments.id', ondelete='CASCADE')) 
    def __init__(self, path, data, type): 
     self.set_resource(path, data, type) 

class Environment(Base): 
    __tablename__ = 'environments' 
    id = Column(Integer, primary_key=True) 
    identifier = Column(Text, unique=True) 
    name = Column(Text) 
    description = Column(Text) 

    _resources = relationship("EnvironmentResource", 
     cascade="all, delete-orphan", 
     passive_deletes=True) 
    _tools = relationship("Tool", 
     cascade="all, delete-orphan", 
     passive_deletes=True) 

    def __init__(self, name, identifier, description): 
     self.name = name 
     self.identifier = identifier 
     self.description = description 

    def get_resource(self, path): 
     return self._resources.filter(EnvironmentResource.path==path).first() 

get_resource बुला पर, मुझे बताया गया है कि 'InstrumentedList' ऑब्जेक्ट कोई विशेषता 'फिल्टर' है - मैं दस्तावेज के माध्यम से चला गया है और इसे काफी समझ नहीं सकता है। मुझे क्या याद आ रही है, ताकि मैं अपने 'get_resource' विधि के अंदर किसी पर्यावरण से संबंधित संसाधनों को फ़िल्टर कर सकूं?

पीएस: मुझे पता है get_resource अपवाद फेंक देगा, यही वह है जो मैं करना चाहता हूं।

उत्तर

35

relationship के साथ Query के साथ काम करने के लिए, आपको इसे lazy='dynamic' के साथ कॉन्फ़िगर करने की आवश्यकता है। Dynamic Relationship Loaders में इस पर अधिक देखें:

_resources = relationship("EnvironmentResource", 
    cascade="all, delete-orphan", 
    lazy='dynamic', 
    passive_deletes=True) 
+8

किसी एक डेटाबेस n00bie क्या आलसी = 'गतिशील' का अर्थ है के बारे में समझाएं और करता है हो सकता है? – appleLover

+3

इसी तरह, यदि आपके पास 'बैकफ्र' के साथ एक ही समस्या है, तो आपको 'backref =' item'' को 'रिलेशनशिप' में 'backref = db.backref (' आइटम्स ', आलसी =' गतिशील ') से कुछ बदलना होगा। '। –

+1

बिना आलसी = 'गतिशील', आप सीधे env.environment_resource पर परिणाम प्राप्त करते हैं। लेकिन आलसी = 'गतिशील' के साथ, यह एक देता है - आप str (env.environment_resource) कर सकते हैं और यह आपको SQL क्वेरी देगी जिस पर आप फ़िल्टर आदि पर काम कर सकते हैं। –

संबंधित मुद्दे