Обновление формы и отображение данных на одной странице проекта Flask

Я запутался в том, как это реализовать. По сути, у меня есть страница edit_profile, где после входа пользователь перенаправляется на эту страницу, чтобы заполнить свой профиль. Пользователь может заполнить свои данные, нажать "Сохранить", после чего он сохраняет данные в MySQL и возвращается к тому же файлу edit_profile со всеми полями, заполненными из базы данных.

@app.route("/edit_profile", methods=['GET','POST'])
@login_required
def edit_profile():
    custprofileform = CustProfileForm()
    if request.method == "POST" and custprofileform.validate_on_submit():
        get_user_profile = CustProfileTB.query.filter_by(cust_id = current_user.id).first()
        if get_user_profile is None:
            profiledata = CustProfileTB(first_name=custprofileform.first_name.data,
                                         last_name= custprofileform.last_name.data,
                                         first_line_address=custprofileform.first_line_address.data,
                                         second_line_address=custprofileform.second_line_address.data,
                                         postcode=custprofileform.phone.data,
                                         phone=custprofileform.phone.data,
                                         agree_tos=custprofileform.agree_tos.data,
                                         cust_id=current_user.id)

            db.session.add(profiledata)
            db.session.commit()
            flash("Customer profile saved successfully")
            return render_template("edit_profile.html", first_name=custprofileform.first_name.data)
        else:
            #profile already exists, so update fileds
            profiledata = CustProfileTB(obj=get_user_profile)
            db.session.commit()
            return render_template("edit_profile.html", first_name=custprofileform.first_name.data)

    if request.method == 'GET':
        data_to_populate = CustProfileTB.query.filter_by(cust_id=current_user.id).first()
        if data_to_populate:
            return render_template("edit_profile.html", custprofileform=data_to_populate)
        return render_template("edit_profile.html", custprofileform=custprofileform)

мой вопрос, это правильный способ сделать это?

На данный момент данные сохраняются в SQLite, но затем отображается форма, я вижу пустые текстовые поля.

Правильно ли я передаю значения после сохранения формы?

Как передать значения после сохранения?

Могу ли я показать это так же просто, как {{ first_name }}

моя модель это:

class CustProfileTB(db.Model):
    id                  = db.Column(db.Integer(), primary_key=True)
    first_name          = db.Column(db.String(50))
    last_name           = db.Column(db.String(50))
    first_line_address  = db.Column(db.String(255))
    second_line_address = db.Column(db.String(255))
    postcode            = db.Column(db.String(255))
    phone               = db.Column(db.String(20))
    agree_tos           = db.Column(db.Boolean(), default=False)
    cust_id            = db.Column(db.Integer())

    def __init__(self, first_name=None, last_name=None, first_line_address=None, second_line_address=None, postcode=None, phone=None, agree_tos=None, cust_id=None ):
        self.first_name = first_name
        self.last_name = last_name
        self.first_line_address = first_line_address
        self.second_line_address = second_line_address
        self.postcode = postcode
        self.phone = phone
        self.agree_tos = agree_tos
        self.cust_id = cust_id

    def __repr__(self):
        self.res = self.first_name+" "+self.last_name
        return '<CustProfileTB {self.res}>'.format(self=self)

Когда я запрашиваю из sqlite, как:

CustProfileTB.query.filter_by(cust_id=4).first()

Я просто получаю то, что упомянул в repr, это first_name и last_name. Как получить все поля и как отобразить эти данные в форме...?

и это не работает

   <label class="col-lg-3 control-label">First Name</label>
              <div class="col-lg-8">
                  {{ custprofileform.csrf_token }}
                  {% if not first_name %}
                    <input type="text" name="first_name" placeholder="Insert First Name" data-required="true" class="form-control">
                  {% else %}
                    <input type="text" name="{{ first_name }}" placeholder="Insert First Name" data-required="true" class="form-control">

                  {% endif %}
              </div>

0 ответов

Другие вопросы по тегам