Django - generi c UpdateView работает в одной форме, но не в другой - PullRequest
0 голосов
/ 18 января 2020

Я работаю над веб-приложением для своего школьного проекта, и я выбрал Django, и все учебники, найденные в Интернете, были довольно всеобъемлющими, и мне удалось в какой-то момент добраться до того места, где я застрял.

I у меня есть class based view, пытающийся обновить объект:

views.py

class MyPostUpdateView(UpdateView):
    model = Post
    fields = ('VideoURL', 'MainDescription')
    template_name = 'myapp/editpost.html'

Затем я импортировал в свой urls.py:

path('profile/account/my-posts/<int:pk>/edit/', MyPostUpdateView.as_view(),
     name='myapp-editpost')

Затем в моем шаблоне HTML у меня есть несколько <form> элементов, но все они принадлежат одному и тому же элементу <div>:

<div class="row">
  <div class="col-12 col-lg-7">
    <form method='post' class="card shadow-soft border p-4 mb-4">
      {% csrf_token %}
      <h5 class="mb-4">Form1</h5>
      <div class="form-group">
        <label for="MainDescription">Titlu</label> {{form.MainDescription|add_class:"form-control shadow-soft"}}
      </div>
      <div class="row">
        <div class="col">
          <button class="btn btn-primary btn-dark mt-2 animate-up-2" type="submit">Update form
                                1</button>
        </div>
      </div>
    </form>
  </div>
  <div class="col-12 col-lg-5">
    <form method='post' class="card shadow-soft border p-4 mb-4">
      {% csrf_token %}
      <h5 class="mb-4">Form2</h5>
      <div class="form-group">
        <label for="VideoURL">Video URL:</label> {{form.VideoURL|add_class:"form-control shadow-soft"}}
      </div>
      <div class="row">
        <div class="col">
          <button class="btn btn-primary btn-dark mt-2 animate-up-2 text-right" type="submit">Update form 2</button>
        </div>
      </div>
    </form>
  </div>
</div>

Поведение следующее: я не могу обновить ни одно из двух полей, если я оставлю код HTML, как указано выше. Однако, если я объединю два поля в одном элементе <form>, это сработает:

<div class="row">
  <div class="col-12 col-lg-7">
    <form method='post' class="card shadow-soft border p-4 mb-4">
      {% csrf_token %}
      <h5 class="mb-4">Form1</h5>
      <div class="form-group">
        <label for="VideoURL">Video URL:</label> {{form.VideoURL|add_class:"form-control shadow-soft"}}
      </div>
      <div class="form-group">
        <label for="MainDescription">Titlu</label> {{form.MainDescription|add_class:"form-control shadow-soft"}}
      </div>
      <div class="row">
        <div class="col">
          <button class="btn btn-primary btn-dark mt-2 animate-up-2" type="submit">Update form
                                1</button>
        </div>
      </div>
    </form>
  </div>
  <div class="col-12 col-lg-5">
    <form method='post' class="card shadow-soft border p-4 mb-4">
      {% csrf_token %}
      <h5 class="mb-4">Form2</h5>
      <div class="form-group">
        <label for="VideoURL">Video URL:</label> {{form.VideoURL|add_class:"form-control shadow-soft"}}
      </div>
      <div class="form-group">
        <label for="MainDescription">Titlu</label> {{form.MainDescription|add_class:"form-control shadow-soft"}}
      </div>
      <div class="row">
        <div class="col">
          <button class="btn btn-primary btn-dark mt-2 animate-up-2 text-right" type="submit">Update form 2</button>
        </div>
      </div>
    </form>
  </div>
</div>

Может ли кто-нибудь мне это объяснить? Я спрашиваю, потому что я хочу расширить функциональность UpdateView на другие поля, принадлежащие той же модели. Спасибо!

1 Ответ

0 голосов
/ 18 января 2020

В вашем первом блоке кода вы поместили два поля в две разные формы. Когда вы отправляете форму, принимается только та, которая была отправлена.

Таким образом, это все равно, что поместить 2 яблока в первое ведро и 2 апельсина во второе ведро.

Представьте, что вы изменили количество яблок и апельсинов на 1 и 1. Прошу принести только одно ведро (вы можете принести только одно ведро). Что просходит? Количество яблок равно 1, но я не знаю, изменили ли вы количество апельсинов во втором ведре.

Поместите яблоки и апельсины в одно ведро, чтобы, когда вы принесете мне ведро, я мог четко знать, сколько яблок и апельсинов было изменено.

яблоки = содержание видеоурлов

апельсины = основное описание

ведро = форма

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...