Flask SQLAlchemy+;多对一关系

Flask SQLAlchemy+;多对一关系,flask,sqlalchemy,Flask,Sqlalchemy,我正在使用Flask+SQLAlchemy+PostgreSQL和两个表。 包含用户的表和包含目标的表(用户希望实现的目标) 型号。py: class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) user_name = Column(Text) email = Column(String(255), unique=True, nullable=False)

我正在使用Flask+SQLAlchemy+PostgreSQL和两个表。 包含用户的表和包含目标的表(用户希望实现的目标)

型号。py:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    user_name = Column(Text)
    email = Column(String(255), unique=True, nullable=False)
    password = Column(String(255))
    # A user can only have one goal at a time
    goal_id = Column(Integer, ForeignKey('goals.id'))
    goal = relationship("Goal", back_populates="user")

class Goal(Base):
    """ Goals: Health, Fitness, Wealth, etc. """
    __tablename__ = 'goals'
    id = Column(Integer(), primary_key=True)
    name = Column(String(80), unique=True)
    description = Column(String(255))
    user = relationship("User", back_populates="goal", uselist=False)
for goal in ["Health", "Fitness", "Wealth"]:
    session.add(Goal(name=goal))
一个用户一次只能有一个目标。在我的测试用例中,我首先用以下内容填充表目标:

测试。py:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    user_name = Column(Text)
    email = Column(String(255), unique=True, nullable=False)
    password = Column(String(255))
    # A user can only have one goal at a time
    goal_id = Column(Integer, ForeignKey('goals.id'))
    goal = relationship("Goal", back_populates="user")

class Goal(Base):
    """ Goals: Health, Fitness, Wealth, etc. """
    __tablename__ = 'goals'
    id = Column(Integer(), primary_key=True)
    name = Column(String(80), unique=True)
    description = Column(String(255))
    user = relationship("User", back_populates="goal", uselist=False)
for goal in ["Health", "Fitness", "Wealth"]:
    session.add(Goal(name=goal))
然后我希望能够用不同的目标填充3个用户。实现这一目标的正确方法是什么

正在尝试(简化代码):

给我:

E AttributeError:“非类型”对象没有属性“附加”


您正在将目标定义为
uselist=False
,这意味着它没有存储为数组。您只需要执行
user.goal=goal
而不是
append
,因为它不存储为列表

所以不是

user = User()
goal = Goal()
user.goal.append(goal)
这样做:

user.goal = goal

事实上,我错过了uselist=False的要点。现在没事了。但是关于关系。你确定吗`我基于关系定义(参见:多对一,双向行为…)啊,是的,我的错误我习惯使用
backref
而不是
back\u填充
。我会更新我的答案