Обновление базы данных с помощью цикла в Flask? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь автоматизировать обновления в базе данных, так как у меня много столбцов. Мне удалось отобразить базу данных с помощью цикла for, но у меня возникла проблема с внесением изменений в базу данных:

@app.route('/listvehicle/<int:vehicle_id>/update', methods=['GET', 'POST'])
@login_required
def update_vehicle(vehicle_id):
    vehicle = Vehicle.query.get_or_404(vehicle_id)
    form = VehicleUpdateForm() 
    if form.validate_on_submit():
        for attr,value in vehicle.__dict__.items():
            for ia in form:
                if ia == attr:
                    vehicle.__dict__[attr] = form.__dict__[ia]
        db.session.commit()
        flash(f'The user has been updated', 'success')
        return redirect(url_for('listvehicle'))
    elif request.method == 'GET':
        for attr,value in vehicle.__dict__.items():
            for ia,iv in form.__dict__.items():
                if ia == attr:
                    iv.data = value
    return render_template('updatevehicle.html', form=form)

Любая помощь с фиксацией изменений в базе данных?

1 Ответ

0 голосов
/ 16 января 2019

Я бы посоветовал вам опубликовать определения модели и формы, но, не видя его, я предлагаю вам использовать другой подход, поэтому менять что-либо с двойным подчеркиванием (например, __dict__) крайне не рекомендуется.

Я вижу улучшение, которое можно сделать, просто используя setattr и итерируя по данным формы:

def update_vehicle(vehicle_id):
    vehicle = Vehicle.query.get_or_404(vehicle_id)
    form = VehicleUpdateForm() 
    if form.validate_on_submit():
        for fieldname, value in form.data.items():
            setattr(vehicle, fieldname, value)
        db.session.commit()
        flash(f'The user has been updated', 'success')
        return redirect(url_for('listvehicle'))
    elif request.method == 'GET':
        for attr,value in vehicle.__dict__.items():
            for ia,iv in form.__dict__.items():
                if ia == attr:
                    iv.data = value
    return render_template('updatevehicle.html', form=form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...