2017-07-07 94 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