SQLAlchemy与多个文件的一对一关系

时间:2016-09-28 11:23:02

标签: python sqlalchemy foreign-keys relationship

我的关系有问题(...),我不明白为什么。

错误:

" InvalidRequestError:初始化mapper Mapper | User | users,表达' BannedUser'找不到姓名("名称' BannedUser'未定义")。如果这是一个类名,请考虑在定义了两个依赖类之后将此关系()添加到类中。"

这是代码:

用户模型

<svg>

禁止的用户模型:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship

from .base import Base as BaseModel


class User(BaseModel, declarative_base()):
     __tablename__ = 'users'

     id = Column(Integer, primary_key=True)
     username = Column(String(16))
     password = Column(String(16))
     nickname = Column(String(16))
     secret_question = Column(String(50))
     secret_answer = Column(String(50))
     role = Column(Integer)
     is_banned = relationship("BannedUser", uselist=False, back_populates='users')

我直接尝试了类而不是类字符串,但这也没有用。

我试过了User.id&#39;而不是&#39; users.id&#39;,但同样的事情发生了。

我不知道该怎么做。

先谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

back_populatesdoc)上,您需要指定与关系另一端相关的属性,同时指定同一实体的表名...

我建议您使用back_refdoc)进行此操作,该user处理另一端相关的属性(因此您不需要指定BannedUser属性... class User(BaseModel, declarative_base()): __tablename__ = 'users' ... is_banned = relationship("BannedUser", uselist=False, back_ref='user') ... ,或者相反的方式,例如:

back_populates

但如果您仍想使用... class User(BaseModel, declarative_base()): __tablename__ = 'users' ... is_banned = relationship("BannedUser", uselist=False, back_populates='user') ... class BannedUser(BaseModel, declarative_base()): __tablename__ = 'banned_users' ... user = relationship('User', back_populates='is_banned') ... ,请执行以下操作:

$(".toogle-icon").click(function(){
  $(this).parent('.menu-item-has-children').find(".sub-menu").slideToggle();
});