更改单元格值后,SQLAlchemy backref为空

2024-06-26 09:43:13 发布

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

我正在使用炼金术,希望建立一对多的关系。我有一个垃圾箱类,每个垃圾箱都有一个提货单。我有一个“皮卡历史”页面,我想显示所有以前的垃圾箱皮卡。如果我更改了一个垃圾箱的位置名称,那么以前与该垃圾箱对应的拾取器现在显示一个空白的位置名称,如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)

任何帮助或见解都将不胜感激


Tags: selfform名称idfalsetruedbdata
1条回答
网友
1楼 · 发布于 2024-06-26 09:43:13

我终于明白了。dump.location更新为新值,但随后与pickup.dumpsterLocation的旧值进行比较。我刚刚决定创建一个名为old_location的新变量,并在设置新位置之前将dump.location值赋给它。然后我比较pickup.dumpsterLocation和old_位置。呼

编辑:为了完整起见,我将循环更改为:

for pickup in Pickup.query.all():
        if pickup.dumpsterLocation == old_location:
            pickup.dumpsterLocation = dump.location

相关问题 更多 >