2017-07-07 88 views
0

我有一个Flask-SQLAlchemy的Flask应用程序。我试图从用户到旅行中建立一对多的关系。我看到,如果我使用SQLAlchemy的declarative_base它可以工作,但是当我使用Flask-SQLAlchemy的db.Model时,它不起作用。Flask-SQLAlchemy一对多关系未能找到名称

,我发现了以下错误:

sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper|User|User, expression 'Trip' failed to locate a name ("name 'Trip' is not defined"). If this is a class name, consider adding this relationship() to the <class 'models.user.User'> class after both dependent classes have been defined. 

这里的模型:

database.py

from flask import abort 
from flask_sqlalchemy import SQLAlchemy 
from sqlalchemy import exc 

db = SQLAlchemy() 


class Mixin(db.Model): 
    __abstract__ = True 
    id = db.Column(db.Integer, primary_key=True) 
    date = db.Column(db.DateTime, default=db.func.now()) 
    date_changed = db.Column(
     db.DateTime, nullable=True, onupdate=db.func.now()) 
    date_to = db.Column(db.DateTime, nullable=True) 

user.py

from database import Mixin, db 

class User(Mixin, db.Model): 
    __tablename__ = 'User'   
    trips = db.relationship(
     'Trip', 
     backref=db.backref('user', lazy='joined'), 
     lazy='dynamic' 
    )  

之旅。 py

from database import Mixin, db 

class Trip(Mixin, db.Model): 
    __tablename__ = 'Trip' 
    title = db.Column(db.String(100), nullable=False) 
    description = db.Column(db.String(250), nullable=False)   
    user_id = db.Column(
     db.Integer, 
     db.ForeignKey('User.id'), 
     nullable=False 
    )  
+1

你可能没有导入'trip'模块可言,或者如果你没有在正确的时间做这件事。 – univerio

+0

但是,如果我使用SQLAlchemy中的declarative_base,它为什么会起作用? – BrHa

+0

我不知道,你必须发布你的其他代码。 – univerio

回答

0

我通过对我的模型使用一个文件来修复它。无论如何,我没有足够的模型来需要多个模型文件。

0

将所有模型存储在一个文件中是一个好主意,但只适用于少数模型。对于大型,我宁愿将模型存储在语义上单独的文件中。

models 
├── __init__.py 
├── model1.py 
├── model2.py 
└── model3.py 

__init__.py需要进口的所有型号文件

import models.model1.py 
import models.model2.py 
import models.model3.py