【发布时间】:2014-09-15 11:03:06
【问题描述】:
这是一个基本待办事项应用程序的模型,用户可以在其中创建一个包含任务的任务列表:
from flask.ext.sqlalchemy import SQLAlchemy
from allot import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String)
tasklists = db.relationship('Tasklist', backref='user', lazy='dynamic')
tasks = db.relationship('Task', backref='user', lazy='dynamic')
def __init__(self, username, email):
self.username = username
class Tasklist(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey('User.id'))
tasks = db.relationship('Task', backref='tasklist', lazy='dynamic')
def __init__(self, title, description, user_id):
self.title = title
self.user_id = user_id
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title= db.Column(db.String)
user_id = db.Column(db.Integer, db.ForeignKey('User.id'))
tasklist_id = db.Column(db.Integer, db.ForeignKey('Tasklist.id'))
def __init__ (self, title, status, user_id):
self.title = title
self.user_id = user_id
self.tasklist_id = tasklist_id
它会产生这个错误:
ArgumentError: 无法确定父/子之间的连接条件 关系 User.tasklists 上的表。指定一个'primaryjoin' 表达。如果存在“辅助”,则需要“辅助连接” 好吧。
在关系中添加primaryjoin 参数,如下所示:
tasklists = db.relationship('Tasklist', backref='user', primaryjoin='user.id==Tasklist.user_id', lazy='dynamic')
...返回:
InvalidRequestError:一个或多个映射器未能初始化 - 不能 继续初始化其他映射器。
模型有什么问题?
我在 [relationship][1] 文档和 SO 上搜索了解释,但无济于事。
【问题讨论】:
标签: join orm foreign-key-relationship flask-sqlalchemy