我正在使用 python 的框架金字塔,用于数据的 sqlalchemy 和用于序列化的棉花糖。我想向客户发送一笔价值
我有挑战和使用这个挑战的玩家,玩家的每个动作都是一个事件,每个事件都有一个持续时间。
对于每个挑战,我想为每个玩家发送总和的持续时间,并且只为一个玩家发送这个值。我尝试使用混合属性或 pre_dump 函数但我没有成功
第一种方法:具有混合属性
__tablename__ = "Challenge" id = Column(Integer, primary_key=True) name = Column(String(255), unique=True, nullable=False) description = Column(TEXT(length=65535)) map_url = Column(String(255)) end_date = Column(DateTime(timezone=False)) alone_only = Column(Integer) level = Column(String(255)) scalling = Column(Integer) draft = Column(Boolean, server_default=text("0")) admin_id = Column(Integer, ForeignKey("User.id")) admin = relationship("User", backref="challenge_manager") event_sum_user = relationship("Events")``` @hybrid_property def event_sum(self): return sum(Events.duration for Events in self.event_sum_user)
但我有所有用户的总和,而不是用户或一个用户的总和
第二种方法:使用 pre_dump 方法
id = fields.Int() name = fields.Str() description = fields.Str() end_date = fields.DateTime() alone_only = fields.Int() level = fields.Str() scalling = fields.Int() draft = fields.Bool() admin = fields.Nested(UserSchema) admin_id = fields.Int(load_only=True) event_sum = fields.Int(dump_only=True) @pre_dump def get_eventsum(self,data, **kwargs): data["event_sum"] = DBSession.query(func.sum(Events.duration)).filter(Events.challenge_id==data["id"]).filter(Events.user_id==1).first() return data```
使用这种方法,我有一个错误 TypeError: 'Challenge' object is not subscriptable'
这样做的目的是发送每个挑战的总持续时间,由用户或挑战中的每个用户实现:id_user 和总持续时间。
谢谢你的帮助
玛丽莲