Sie*_*cje 9 python sqlalchemy-migrate flask python-2.7 flask-sqlalchemy
我使用本教程作为指导.http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database
我想要有可以产生多个产品的类别.类似于他有多个帖子的用户.
当我打开python解释器并尝试创建一个类别
>>>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)
Doo*_*beh 14
这是因为你发生了碰撞.错误是:
`sqlalchemy.exc.ArgumentError: Error creating backref 'category' on relationship 'Category.products': property of that name exists on mapper 'Mapper|Product|product'`
你可以看到,你已经创建了一个关系中Category,以Product这是双向的,所以你可以做category.products列出所有与该类别相关的产品,或者你也可以去product.category这将使您所选产品的类别.
但是你已经有了category房产Product.所以只需将其更改为唯一 - 您的Product类通常应如下所示:
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,category_id以便backref不再与它发生碰撞.
| 归档时间: | 
 | 
| 查看次数: | 3262 次 | 
| 最近记录: |