向 pyramid_blogr 个模型添加关系的示例

Example of adding relationship to pyramid_blogr models

正在学习 http://pyramid-blogr.readthedocs.org/en/latest/ 中的教程,并希望在用户模型和入口模型之间添加关系,然后能够在添加新的 post 时填充该 FK 字段。

这是我目前所知道的...

entry.py

...
class Entry(Base):
    __tablename__ = 'entries'
    id = Column(Integer, primary_key=True)
    title = Column(Unicode(255), unique=True, nullable=False)
    body = Column(UnicodeText, default=u'')
    created = Column(DateTime, default=datetime.datetime.utcnow)
    edited = Column(DateTime, default=datetime.datetime.utcnow)
    user_id = Column(Integer, ForeignKey('users.id'))

    user = relationship("User", backref=backref('entries'))
...

user.py

...
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(Unicode(255), unique=True, nullable=False)
    password = Column(Unicode(255), nullable=False)
    last_logged = Column(DateTime, default=datetime.datetime.utcnow)
    entries = relationship("Entry", order_by="entry.id", backref="user_id")

...

我假设 forms.py 也需要修改以将 user_id 作为隐藏字段传递,但我可能没有正确考虑。

布莱恩,

当您声明 "entries" 这样的关系时(就像您在代码片段中所做的那样)

并定义一个外键,你可以这样做:

user.entries.append(entry)

并且您的外键将被自动填充并且您新创建的对象将被添加到会话中 - 您不想将 user_id 作为表单参数传递给您的模型 - 作为一个用户这将是不安全的操作可以为其他人保存条目。

http://docs.sqlalchemy.org/en/rel_1_0/orm/basic_relationships.html?highlight=append#one-to-many

这是说明它的 sqlalchemy 文档部分。