9

मैं इस ट्यूटोरियल को दिशानिर्देश के रूप में उपयोग कर रहा हूं। http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-databaseफ्लास्क डेटाबेस समस्या

मैं ऐसे श्रेणियां रखना चाहता हूं जो एकाधिक उत्पाद को बरकरार रख सकें। इसी तरह उनके पास एकाधिक पोस्ट वाले उपयोगकर्ता हैं।

जब मैं अजगर दुभाषिया खुल जाएगा और एक वर्ग

>>>from app import db, models 
>>>u = models.Category(name="Test") 

मैं यह त्रुटि

/sqlalchemy/orm/properties.py", line 1387, in _generate_backref 
self, mapper)) 
sqlalchemy.exc.ArgumentError: Error creating backref 'category' on relationship 'Category.products': property of that name exists on mapper 'Mapper|Product|product' 

तो वहाँ backref साथ एक समस्या है मिल बनाने का प्रयास करें

। ट्यूटोरियल में (और मैंने इसे अपने कोड से आजमाया है) वह उपयोगकर्ता को समान वाक्यविन्यास के साथ बनाने में सक्षम है।

मैंने अपनी सभी फाइलों का उपयोग करने की कोशिश की और एक नया डेटाबेस बनाया और माइग्रेट किया और मुझे एक ही त्रुटि मिल गई।

यहाँ मेरी models.py फ़ाइल है:

from app import db 

WR_IP_NO = 0 
WR_IP_YES = 1 

class Category(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(64), unique = True) 
    products = db.relationship('Product', backref = 'category', lazy = 'dynamic') 

    def __repr__(self): 
     return '<Category %r>' % (self.name) 

class Product(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    category = db.Column(db.String(64), db.ForeignKey('category.id')) 
    courseName = db.Column(db.String(120), unique = True) 
    ip = db.Column(db.SmallInteger, default = WR_IP_YES) 
    duration = db.Column(db.Integer) 
    productRev = db.Column(db.String(64)) 
    #use when database is updated? 
    releaseDate = db.Column(db.DateTime) 

    def __repr__(self): 
     return '<Category> %r>' % (self.courseName) 

उत्तर

14

यह है क्योंकि आप एक टक्कर मिल गया है है। त्रुटि है:

`sqlalchemy.exc.ArgumentError: Error creating backref 'category' on relationship 'Category.products': property of that name exists on mapper 'Mapper|Product|product'` 

आप देख सकते हैं कि आप Product जो दो तरीका है करने के लिए Category भीतर एक रिश्ता बना लिया है तो आप category.products कर सकता है कि सभी वर्ग के साथ जुड़े उत्पादों को सूचीबद्ध करने के लिए, या वैकल्पिक रूप से आप जा सकते हैं product.category जो आपको चयनित उत्पाद के लिए श्रेणी प्रदान करेगा।

लेकिन Product में आपको category संपत्ति मिल चुकी है। तो बस अपने Product वर्ग unique-- होने के लिए इसे बदलने के आम तौर पर दिखाई देना चाहिए:

class Product(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    category_id = db.Column(db.String(64), db.ForeignKey('category.id')) 
    courseName = db.Column(db.String(120), unique = True) 
    ip = db.Column(db.SmallInteger, default = WR_IP_YES) 
    duration = db.Column(db.Integer) 
    productRev = db.Column(db.String(64)) 
    #use when database is updated? 
    releaseDate = db.Column(db.DateTime) 

    def __repr__(self): 
     return '<Category> %r>' % (self.courseName) 

देखें कि कैसे मैं category_id को category बदल दिया है ताकि backref नहीं रह गया है इसके साथ टकरा।

+0

आपको बहुत धन्यवाद – Siecje

+0

क्या यह SQL डेटाबेस फ़ील्ड श्रेणी को श्रेणी_आईडी में नामित करने का प्रयास करता है? – Herbert