2013-02-26 82 views
6

मैं एक छोटी परियोजना पर काम कर रहा हूं जहां मैं फ्लास्क-एसक्ल एल्केमी का उपयोग आसन्नता सूची संबंधों को लागू करने के लिए कर रहा हूं। मेरे पास एक मॉडल (टेबल) है जिसमें db.Relationship() के लिए एक विशेषता है जो एक ही तालिका के parent_id कॉलम का संदर्भ देता है।फ्लास्क-एसक्ल एल्केमी एडजैसीसी लिस्ट रिलेशनशिप बैकफ्रैफ़ अप्रत्याशित त्रुटि

class Node(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    title = db.Column(db.String(80)) 
    folder_id = db.Column(db.Integer, db.ForeignKey('node.id')) 

    children = db.relationship('Node', backref = 'parent', remote_side=[id]) 

जब मैं इस तरह के निम्न कोड के रूप में एक मूल फ़ोल्डर के लिए एक बच्चे फ़ोल्डर जोड़ने के लिए अजगर शैल में बच्चे पर backref विशेषता का उपयोग करने की कोशिश (आंशिक:

यहाँ निम्नलिखित कोड (आंशिक) है):

parentNode = Node('title1') 
db.session.add(parent) 
db.session.commit() 

childNode = Node('title2') 
child.parent = parentNode 

हालांकि, मैं निम्नलिखित मिली त्रुटियाँ पाने के बाद मैं की कोशिश कि अजगर खोल में:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 

TypeError: Incompatible collection type: Node is not list-like 

मैंने एसक्यूएलकेमी दस्तावेज़ों को एक समाधान का पता लगाने के लिए पढ़ा है और उनके पास निकटता सूची संबंधों के लिए समान वाक्यविन्यास है। इसका एक समान उदाहरण है लेकिन यह दिखाता नहीं है कि कैसे कोई बच्चे नोड में एक पैरेंट नोड जोड़ सकता है जैसे कि मैं खोल में कोशिश कर रहा था। बच्चे की बैकफ्रफ़ संपत्ति में पैरेंट नोड जोड़ने का कारण यह है कि यह एक से कई रिश्तों के साथ काम करता है। कोड के साथ समस्या को खोजने में कोई मदद की सराहना की जाएगी ... कृपया वैकल्पिक समाधानों का सुझाव देने में संकोच न करें।

धन्यवाद!

उत्तर

5

आप रिश्ते को गलत तरीके से कॉन्फ़िगर करते हैं। कृपया इस एक कार्य करें:

from sqlalchemy.orm import backref 
class Node(db.Model): 
    # ... 
    children = db.relationship('Node', backref=backref('parent', remote_side=[id])) 

या

class Node(db.Model): 
    # ... 
    parent = db.relationship("Node", backref='children', remote_side=[id]) 
+0

वान, टुकड़ा प्रदान करने और समस्या की ओर इशारा करने के लिए धन्यवाद। मैंने अभी रिश्ते को कॉन्फ़िगर किया है जिस तरह से आपने अभी दिखाया है और अनुमान लगाया है, यह ठीक उसी तरह काम करता है जैसा मैंने उम्मीद की थी! बहुत बहुत धन्यवाद ... वास्तव में तत्काल सहायता की सराहना करते हैं। – shafayet

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

  • कोई संबंधित समस्या नहीं^_^