Python sqlalchemy检查对象是否在模型中

Python sqlalchemy检查对象是否在模型中,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我希望能够将受邀者添加到这样的活动中: e = events.get(1) u = users.get(1) e.invitees.append(u) 然后在我的服务层中,我希望能够实现如下功能: def add_invitee(self, event, user): if user in self.get(event).invitees: raise OroposError(u'User already invited') event.invitees.app

我希望能够将受邀者添加到这样的活动中:

e = events.get(1)
u = users.get(1)
e.invitees.append(u)
然后在我的服务层中,我希望能够实现如下功能:

def add_invitee(self, event, user):
    if user in self.get(event).invitees:
        raise OroposError(u'User already invited')
    event.invitees.append(user)
    return self.save(event), user
当我尝试这个时,发生了一些事情。当我尝试使用我的函数时,出现以下错误:

  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/collections.py", line 1057, in append
    item = __set(self, item, _sa_initiator)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/collections.py", line 1029, in __set
    item = getattr(executor, 'fire_append_event')(item, _sa_initiator)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/collections.py", line 733, in fire_append_event
    item, initiator)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 910, in fire_append_event
    value = fn(state, value, initiator or self)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 1140, in emit_backref_from_collection_append_event
    child_impl = child_state.manager[key].impl
KeyError: 'event'
InterfaceError:(InterfaceError)绑定参数0时出错-可能 不支持的类型。u'选择events.id作为events\u id,选择events.user\u id作为 事件\用户\ id,events.event\名称作为事件\事件\名称, events.event\u mesg作为events\u event\u mesg,events.start\u date作为 事件开始日期,事件结束日期作为事件结束日期, events.event\u状态为events\u event\u状态,events.rsvp为 events\u rsvp,events.created AS events\u created\n来自events\n此处 events.id=?'(,)

当我尝试e.invitees.append(u)时,我得到以下错误:

  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/collections.py", line 1057, in append
    item = __set(self, item, _sa_initiator)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/collections.py", line 1029, in __set
    item = getattr(executor, 'fire_append_event')(item, _sa_initiator)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/collections.py", line 733, in fire_append_event
    item, initiator)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 910, in fire_append_event
    value = fn(state, value, initiator or self)
  File "/Users/f/.virtualenvs/Oropos/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 1140, in emit_backref_from_collection_append_event
    child_impl = child_state.manager[key].impl
KeyError: 'event'
这让我困惑了一段时间。有什么建议吗

以下是与我的问题相关的模型

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', backref=db.backref('event'))
    proposals = db.relationship('Proposal', backref=db.backref('event'))


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)
    user_id = db.Column(db.ForeignKey('users.id'))
    event_id = db.Column(db.ForeignKey('events.id'))

    user = db.relationship('User', foreign_keys='Invite.user_id', lazy='joined')


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)
    user_id = db.Column(db.ForeignKey('users.id'))
    event_id = db.Column(db.ForeignKey('events.id'))

如果我没有弄错的话,您正在尝试将
用户
实例添加到
邀请
实例列表中,您确定这是正确的吗

根据您的代码,
e.invitees
包含具有外键
event\u id
指向
事件
实例
e
Invite
实例。如果您想让您的
受邀者
表示与
用户
表的多对多关系(这是由两个外键暗示的),您可能需要将其设置为一个。另外,我敢猜测一个
用户
只能有一个
邀请
参加单个
事件
,这意味着字段应该与表参数相关联