9

이 가이드를 지침으로 사용하고 있습니다. http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database플라스크 데이터베이스 문제

여러 제품을들 수있는 카테고리를 갖고 싶습니다. 그가 여러 게시물을 가진 사용자를 갖는 것과 비슷합니다. 내가 파이썬 인터프리터를 열고 범주 내가

/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' 

은 그래서 역 참조에 문제가이 오류를 얻을

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

을 만들려고

. 이 튜토리얼에서는 비슷한 코드로 User를 만들 수있다.

나는 그의 모든 파일을 사용하여 시도해 보았고 새로운 데이터베이스를 생성 및 마이그레이션 했으므로 동일한 오류가 발생합니다. 당신이 충돌을 가지고 있기 때문에

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

그건 :

여기 내 models.py 파일입니다. 오류 :

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

당신이 그 범주와 관련된 모든 제품을 나열 category.products을 할 수 있도록, 당신은 두 가지 방법입니다 ProductCategory 내에서의 관계를 만든 것을 볼 수있다, 또는 대안 당신이 갈 수 product.category은 선택한 제품의 카테고리를 제공합니다.

하지만 Product에 이미 category 속성이 있습니다. 나는 역 참조가 더 이상 충돌 그래서 category_idcategory을 변경되지했습니다 방법을 참조하십시오

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) 

: 그래서 그냥 일반적으로 같아야 당신의 Product 클래스 unique--로 변경합니다.

+0

고맙습니다. – Siecje

+0

SQL 데이터베이스 필드 카테고리의 이름을 category_id로 변경합니까? – Herbert