Вызов 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)
Используя этот шаблон, вы можете создавать динамические страницы, которые обновляются сами по себе без необходимости обновления пользователем.