首页 > 解决方案 > 如何提交修改后的表格?

问题描述

我正在尝试提交表单,但我总是失败,因为代码总是遇到这个“if form.prekes_nuotrauka.data”条件。如果我不想更改我的照片,只有名称和内容会给我错误,我希望代码会点击 else 块但它失败了。这个表格已经创建好了,我只想修改它。如何在不上传更多照片的情况下更改名称?

@app.route("/app_main_page/preke/<int:p_id>",  methods=["GET", "POST"])
@login_required
def viena_preke(p_id):
    global image
    form = UpdateItemForm()
    preke = Preke.query.get(p_id)
    a = preke.items
    if form.validate_on_submit():
        if form.prekes_nuotrauka.data:
            for prek in form.prekes_nuotrauka.data:
                file = save_pict(prek)
                image = url_for('static', filename='profile_pictures/' + file)
                prekes_ft = PrekesNuotraukos(prekes_nuotraukos=image, PrekesFT=preke)
                db.session.add(prekes_ft)
            preke.apibudinimas = form.apibudinimas.data
            preke.pavadinimas = form.pavadinimas.data    
            db.session.commit()
            flash("Photos have been updated", "success")
            return redirect(url_for("home"))
        else:
            preke.apibudinimas = form.apibudinimas.data
            preke.pavadinimas = form.pavadinimas.data
            db.session.commit()
            flash("Jusu preke buvo atnaujinta", "success")
            return redirect(url_for("home"))
    else:
        form.pavadinimas.data = preke.pavadinimas
        form.apibudinimas.data = preke.apibudinimas
    return render_template("VienaPreke.html", title="Viena preke", preke=preke, form=form, items=a)

HTML 部分

{%extends "layout.html"%}
{%block content%}
    <div class="all-in-one">
        <div class="content-section">
            <form method="post" action="" enctype="multipart/form-data">
                {{form.hidden_tag()}}
                <fieldset class="form-group">
                    <legend class="border-bottom mb-4">Prekes informacija</legend>
                    {%if preke.author == current_user%}
                        <div>
                            <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteModal">Delete</button>
                        </div>
                    {%endif%}
                    <div class="form-group">
                            {{form.pavadinimas.label(class="form-control-label")}}

                            {%if form.pavadinimas.errors%}
                                {{form.pavadinimas(class="form-control form-control-lg is-invalid")}}
                                <div class="invalid-feedback">
                                    {%for error in form.pavadinimas.errors%}
                                        <span>{{error}}</span>
                                    {%endfor%}
                                </div>
                            {%else%}
                                {{form.pavadinimas(class="form-control form-control-lg")}}
                            {%endif%}
                    </div>
                    <div class="form-group">
                        {{form.apibudinimas.label(class="form-control-label")}}

                        {%if form.apibudinimas.errors%}
                            {{form.apibudinimas(class="form-control form-control-lg is-invalid")}}
                            <div class="invalid-feedback">
                                {%for error in form.apibudinimas.errors%}
                                    <span>{{error}}</span>
                                {%endfor%}
                            </div>
                        {%else%}
                            {{form.apibudinimas(class="form-control form-control-lg")}}
                        {%endif%}
                    </div> 
                    <div class="form-group">
                        <div id="secondary-images">
                            {{form.prekes_nuotrauka.label()}}

                            {{form.prekes_nuotrauka(class="form-control-file")}}
                            {%for itema in items%}
                                <a href="{{itema.prekes_nuotraukos}}">
                                    <img class="images" src="{{itema.prekes_nuotraukos}}">
                                </a>
                            {%endfor%}
                            
                            {%if form.prekes_nuotrauka.errors%}
                                {%for error in form.prekes_nuotrauka.errors%}
                                        <span class="text-danger">{{error}}</span>
                                {%endfor%}
                            {%endif%}
                        </div>
                    </div>
                </fieldset>
                {% if preke.author == current_user%}
                    <div class="form-group">
                        {{form.submit(class="btn btn-outline-info")}}
                    </div>
                {%endif%}
             </form>

             <div class="carousel-and-images">
                <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
                  <ol class="carousel-indicators">
                      {%for itema in items%}
                         <li data-target="#carouselExampleIndicators" data-slide-to="{{loop.index}}" class="active"></li>
                      {%endfor%}
                  </ol>
                  <div class="carousel-inner">
                        <div class="carousel-item active">
                          <img class="d-block w-100" src="{{items[0].prekes_nuotraukos}}" alt="First slide">
                        </div>
                        {%for itema in items%}
                            <div class="carousel-item">
                              <img class="d-block w-100" src="{{itema.prekes_nuotraukos}}" alt="Second slide">
                            </div>
                        {%endfor%}
                  </div>
                  <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
                    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                    <span class="sr-only">Previous</span>
                  </a>
                  <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
                    <span class="carousel-control-next-icon" aria-hidden="true"></span>
                    <span class="sr-only">Next</span>
                  </a>
            </div>
        </div>
    </div>

    
    

<!-- Modal -->
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalLongTitle" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="deleteModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
          <form action="{{url_for('delete_Preke', p_id=preke.id)}}" method="post">
              <input class="btn btn-danger" type="submit" value="Delete">
          </form>
      </div>
    </div>
  </div>
</div>
{%endblock%}

我收到的错误消息

PIL.UnidentifiedImageError: cannot identify image file <FileStorage: '' ('application/octet-stream')>

标签: pythonflaskflask-wtforms

解决方案


推荐阅读