我正在使用炼金术,希望建立一对多的关系。我有一个垃圾箱类,每个垃圾箱都有一个提货单。我有一个“皮卡历史”页面,我想显示所有以前的垃圾箱皮卡。如果我更改了一个垃圾箱的位置名称,那么以前与该垃圾箱对应的拾取器现在显示一个空白的位置名称,如picture here
很明显,转储程序名称更新成功,因为您可以在屏幕右侧看到“WEB”。我注意到,如果我将垃圾箱名称更改回其原始值,则拾取列表可以正常工作,我假设是因为它找到了一个垃圾箱,其名称与最初分配给它的名称匹配
以下是我更新垃圾箱信息的代码:
def update_dumpster(id):
dump = Dumpster.query.get_or_404(id)
form = UpdateDumpsterForm()
if form.validate_on_submit():
#Update the dumpster information
dump.location = form.location.data
dump.lat = form.lat.data
dump.lng = form.lng.data
dump.full = form.full.data
for pickup in dump.pickups:
pickup.dumpsterLocation = dump.location
db.session.commit()
最初,我没有包括for循环,但当我注意到我的问题时,这是我第一次尝试的解决方案。我也尝试了pickup.dumpster.location = dump.location
,但也没有解决问题
以下是我在models.py中使用的类:
class Dumpster(db.Model):
id = db.Column(db.Integer, primary_key=True)
location = db.Column(db.String, nullable=False)
full = db.Column(db.Boolean, nullable=False)
onRoute = db.Column(db.Boolean, nullable=False)
lat = db.Column(db.Float, nullable=False)
lng = db.Column(db.Float, nullable=False)
pickups = db.relationship('Pickup', backref='dumpster', lazy=True)
def __repr__(self):
return "Dumpster({}, {})".format(self.id, self.location)
class Pickup(db.Model):
id = db.Column(db.Integer, primary_key=True)
date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
time = db.Column(db.String, nullable=True, default='midnight')
dumpsterLocation = db.Column(db.String, db.ForeignKey('dumpster.location'), nullable=False)
def __repr__(self):
return "Pickup({}, {}, {})".format(self.id, dumpster.location, self.date)
任何帮助或见解都将不胜感激
我终于明白了。dump.location更新为新值,但随后与pickup.dumpsterLocation的旧值进行比较。我刚刚决定创建一个名为old_location的新变量,并在设置新位置之前将dump.location值赋给它。然后我比较pickup.dumpsterLocation和old_位置。呼
编辑:为了完整起见,我将循环更改为:
相关问题 更多 >
编程相关推荐