Flask炼金术多对多连接条件

2024-09-27 17:27:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3张桌子,活动,邀请和建议。我想可以查询活动。邀请并返回所有被邀请者的查询(并且能够从我的用户表中获取用户信息,比如事件.被邀请者.全部()[0]。用户名)。提案也是如此。通过阅读烧瓶SQLAlchemy文档,我看到了如何制作多对多的表。我一直在努力让他们配置正确,但没有任何运气。这是基于Overholt的Flask应用程序的一部分。这是我的桌子:

events_invitees = db.Table(
    'events_invitees',
    db.Column('event_id', db.Integer(), db.ForeignKey('events.id')),
    db.Column('user_id', db.Integer(), db.ForeignKey('users.id'))
    )

events_proposals = db.Table(
    'events_proposals',
    db.Column('event_id', db.Integer(), db.ForeignKey('events.id')),
    db.Column('proposal_id', db.Integer(), db.ForeignKey('proposals.id'))
    )


class EventJsonSerializer(JsonSerializer):
    pass


class Event(EventJsonSerializer, db.Model):
    __tablename__ = 'events'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    event_name = db.Column(db.String(30))
    event_mesg = db.Column(db.Text)
    start_date = db.Column(db.Date)
    end_date = db.Column(db.Date)
    event_status = db.Column(db.Boolean)
    rsvp = db.Column(db.Date)
    created = db.Column(db.DateTime, default=get_current_time)

    invitees = db.relationship('Invite',
                secondary=events_invitees,
                backref=db.backref('events', lazy='dynamic'))

    events_proposals = db.relationship('Event',
                        secondary=events_proposals,
                        backref=db.backref('events', lazy='dynamic'))


class InviteJsonSerializer(JsonSerializer):
    pass


class Invite(InviteJsonSerializer, db.Model):
    __tablename__ = 'invites'

    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.Date, default=get_current_time)
    event_id = db.Column(db.ForeignKey('events.id'))
    user_id = db.Column(db.ForeignKey('users.id'))


class ProposalJsonSerializer(JsonSerializer):
    pass


class Proposal(ProposalJsonSerializer, db.Model):
    __tablename__ = 'proposals'

    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.Date, default=get_current_time)
    date = db.Column(db.Date)
    event_id = db.Column(db.ForeignKey('events.id'))
    user_id = db.Column(db.ForeignKey('users.id'))

这是我得到的错误: sqlalchemy.exc.NoForeignKeysError:无法确定关系上父/子表之间的联接条件活动邀请人-没有外键通过辅助表“events_invitees”链接这些表。请确保引用列与ForeignKey或ForeignKeyConstraint关联,或指定“primaryjoin”和“secondaryjoin”表达式。在


Tags: eventiddbdatecolumnintegereventsusers
1条回答
网友
1楼 · 发布于 2024-09-27 17:27:51

你能试试这个吗:

删除这一行event_id = db.Column(db.ForeignKey('events.id')),并在Invite表上这样做

class Invite(InviteJsonSerializer, db.Model):
    __tablename__ = 'invites'

    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.Date, default=get_current_time)
    user_id = db.Column(db.ForeignKey('users.id'))

here起,我们不需要在子表上指定forignkey,因为在父类中使用了“secondary”参数。在

也会对活动做出改变“受邀者”用户.id“收件人”邀请.id“像这样

^{pr2}$

相关问题 更多 >

    热门问题