我想更新我的formset工厂图像发布,我能够更新帖子文本字段,但formset工厂图像是noot更新

时间:2018-04-03 10:54:37

标签: python django django-forms django-views formsets

我已经搜索过这个问题,但由于之前有很多问题被问到,所以无法得到正确答案。

我正在为多个图像字段使用具有多个字段和其他模型(具有帖子模型的外键)的帖子模型。我想更新我创建的帖子。

这是我的views.py for update_post

def update_post(request, post_id):
    ImageFormSet = modelformset_factory(PostPicture, form=AddPictures, extra=10, min_num=1)
            post_form = get_object_or_404(Posts, pk=post_id)
            if request.method == "POST":
                form = AddFile(request.POST, instance=post_form)
                formset = ImageFormSet(queryset=PostPicture.objects.filter(post=post_id))
                if form.is_valid() and formset.is_valid():
                    form.save()
                    formset.save()
                    for form in formset:
                        if form:
                            image = form['image']
                            photo = PostPicture(post=form, image=image)
                            photo.save()
                    messages.success(request, 'Post updated Successfully!')
                    return render(request, 'vehicles_app/update_post.html', 
    {
                        'form': form,
                        'formset': formset,
                        'post_form': post_form,
                        'post_id': post_id,
                    })
                else:
                    print(form.errors, formset.errors)
            else:
                form = AddFile()
                formset = ImageFormSet(queryset=PostPicture.objects.none())
            return render(request, 'vehicles_app/update_post.html', {'form': 
    form, 'formset': formset, 'post_form':post_form, 'post_id': post_id})

这是我的update_post.html

                    <form id="post_form" method="post" action="{% url 
                                 'vehicles_app:update_post' post_id %}"
                  enctype="multipart/form-data">
                  {% csrf_token %}

                <div class="row">
                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="title">Ad Title</label>
                  </div>
                  <div class="title" style="float: right; width: 45%">
                    <input type="text" name="title" placeholder="Type Here" 
                           value='{{ form.initial.title }}' required>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="city">City</label>
                  </div>
                  <div class="city" style="float: right; width: 45%">
                    <select name="city"  value='{{ form.initial.city }}'>
                      <option selected="selected" 
                              value="islamabad">Islamabad</option>
                      <option value="karachi">Karachi</option>
                      <option value="lahore">Lahore</option>
                      <option value="peshawar">Peshawar</option>
                      <option value="quetta">Quetta</option>
                      <option value="multan">Multan</option>
                      <option value="faisalabad">Faisalabad</option>
                    </select>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="price">Price</label>
                  </div>
                  <div class="price" style="float: right; width: 45%">
                    <input type="text" name="price" placeholder="Type Here" 
                      value='{{ form.initial.price }}' required>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="brand">Brand</label>
                  </div>
                  <div class="brand" style="float: right; width: 45%">
                    <select name="brand" value='{{ form.initial.brand }}'>
                      <option selected="selected" 
                          value="honda">Honda</option>
                      <option value="audi">Audi</option>
                      <option value="bmw">BMW</option>
                      <option value="suzuki">Suzuki</option>
                      <option value="toyota">Toyota</option>
                      <option value="lexus">Lexus</option>
                      <option value="hyundai">Hyundai</option>
                      <option value="jeep">Jeep</option>
                      <option value="mazda">Mazda</option>
                      <option value="mitsubishi">Mitsubishi</option>
                      <option value="daewoo">Daewoo</option>
                    </select>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="modelyear">Model-Year</label>
                  </div>
                  <div class="modelyear" style="float: right; width: 45%">
                    <input type="text" name="modelyear" 
                     placeholder="ie:1970-2018"  value='{{ 
                                  form.initial.modelyear }}' required>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="condition">Condition</label>
                  </div>
                <div class="condition" style="float: right; width: 45%">
                  <select name="condition"  value='{{ form.initial.condition 
                                                          }}'>
                    <option selected="selected" value="new">NEW</option>
                    <option value="used">USED</option>
                  </select>
                </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="mileage">Mileage</label>
                  </div>
                <div class=mileage style="float: right; width: 45%">
                    <input type="text" name="mileage" placeholder="ie:50000"  
                               value='{{ form.initial.mileage }}' required>
                </div>
              </div>
                </div>
                <br>


                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="details">Type details here</label>
                  </div>
                <div class="details" style="float: right; width: 45%">
                  <textarea name="details" rows="9" cols="45" value='{{ 
                       form.initial.details }}' required></textarea>
                </div>
                </div>
                <br>
                <br>
                <br>
                <br>
                <br>
                <br>
                <br>


                {{ formset.management_form }}
                  {% if formset %}
                    {% for form in formset %}
                      {% if form %}
                      <table class="display" cellspacing="1" width="100%">
                        <tr>
                          <td>{{ form }}</td>
                        </tr>
                      </table>
                      {% endif %}
                    {% endfor %}
                  {% endif %}


                  <input type="submit" name="submit" value="Update" 
                       class="btn btn-info" id="post_btn">
                  <input type=button class="btn btn-default" value="Cancel" 
                       onClick="javascript:history.go(-1);">
            </form>

0 个答案:

没有答案