Вызов UpdateView без перехода на страницу UpdateView в Django

Я ищу лучший способ создания обновляемого списка из объектов модели в Django.

Допустим, у меня есть models.py:


class Machine(models.Model):
    machine = models.CharField(max_length=10, blank=True)
    currently_running = models.CharField(max_length=30, blank=True)

и у меня есть views.py, который показывает объекты из этой модели:


class MachineView(ListView):
    model = Machine
    fields = ['machine', 'currently_running']
    template_name = 'viewer/machine_view.html'

class MachineUpdateView(UpdateView):
    model = Machine
    fields = ['currently_running']
    template_name = 'viewer/machine_update_view.html'

Затем у меня есть шаблон, machine_view.html:

...

<table>
  <tr>
    <th>Machine</th>
    <th>Part Running</th>
    <th></th>
  </tr>
  {% for machine in object_list %}
  <tr>
    <td>{{machine.machine}}</td>
    <td>{{machine.currently_running}}</td>
    <td> <a href="{% url 'machine_update_view' pk=machine.pk %}">Change</a> </td>
  </tr>
  {% endfor %}
</table>
...

и machine_update_view.html:

...

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update">
</form>
...

В настоящее время это переводит пользователя на страницу обновления, где он вводит один параметр и снова нажимает кнопку обновления.

Можно ли сделать это с просто переданными параметрами автоматически?

Вместо того чтобы переходить на страницу обновления, они просто вносят изменения, которые хотели бы сделать, а затем напрямую отправляют запрос на обновление. Затем обновите страницу, чтобы они могли увидеть сделанное ими обновление.

Можно ли это сделать?


Редактирование: Для ясности того, что я хочу сделать, я хотел бы добавить строку:

<td><input type="text" name="currently_running"></td>

в файл machine_view.html.

Или что-то в этом роде в DetailView, который будет отправлен в качестве параметра.

Таким образом, я могу обойтись без полного перехода на страницу UpdateView. Просто вызовите его из DetailView, и он выполнит обновление.

Вот пример того, как использовать javascript (jquery и ajax) для динамического обновления веб-страницы:

template.html

<!-- we will use js to send a post request when this button is clicked -->
<button id='my-button>Submit</button>

script.js


// using jquery, we will set the function that executes when the button is clicked
$('#my-button').click(function() {

  // launch an ajax request:
  $.ajax({
    type : 'POST',
    url : '<the-url>',
    data : {
      someKey : 'someValue'
    },
    success : function(response) {
      
      // this function executes when we receive a succesful response from the backend

      // unpack the response:
      result = response.result;

      // update html page:
      ...
 
   }
  }
});

views.py

def my_view_function(request):

    """ this function executes when the ajax request is sent """

    # unpack the request
    some_value = request.POST.get('someKey')

    # do some logic:
    ...
  
    # pack the response:
    response = {
        "result" : "some result"
    }

    return JsonResponse(response)

Используя этот шаблон, вы можете создавать динамические страницы, которые обновляются сами по себе без необходимости обновления пользователем.

Вернуться на верх