Сохранение в базу данных при обновлении поля Notes в html-таблице (django)
Я нашел много ответов на этот вопрос на SO, но мое понимание всего этого все еще слишком новое, чтобы понять, как реализовать, поэтому просто размещаю свой точный вопрос:
У меня есть таблица, которая является фильтрованным представлением моей базы данных, которая отображается на одной странице моего приложения. В ней есть столбец заметок, где каждая ячейка использует content-id-editable. Я хочу добавить кнопку сохранения, и когда кто-то захочет сохранить эту конкретную ячейку раздела заметок, я хочу, чтобы он мог нажать "сохранить" и обновленная ячейка была отправлена в базу данных.
Вот мой views.py:
def notes(request):
try:
if request.method == 'POST':
note = request.POST['tm.Notes']
updated_note = TM.Object.save(Notes__=note)
return render(request,'homepage/detail.html', {'Notes': updated_note})
else:
return render(request,'homepage/detail.html', {})
except TM.DoesNotExist:
raise Http404("Info Does Not Exist")
Вот мой html:
<table class= "content-table">
<thead>
<tr>
<th>Name</th>
<th>Distributor</th>
<th>State</th>
<th>Brand</th>
<th>Cell</th>
<th>Email</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
{% for tm in territory_manager %}
<td style="white-space:nowrap;">{{ tm.Name }}</td>
<td style="white-space:nowrap;">{{ tm.Distributor }}</td>
<td style="white-space:nowrap;">{{ tm.State }}</td>
<td style="white-space:nowrap;">{{ tm.Brand }}</td>
<td style="white-space:nowrap;">{{ tm.Cell }}</td>
<td style="white-space:nowrap;">{{ tm.Email }}</td>
<td style="white-space:wrap;" input type="submit" class="primary" value="Submit" ><div contenteditable>{{ tm.Notes }}</div></td>
</tr>
{% endfor %}
</tr>
{% else %}
<h2>No Results for: {{ state }} </h2>
{% endif %}
</tbody>
</table>
Я знаю, что это ужасно неправильно, и кажется, что должно быть очень простое решение, но чем больше я пытаюсь применить что-то из SO, тем больше запутываюсь. Любая помощь приветствуется. Спасибо!
Я бы не рекомендовал устанавливать его таким образом, поскольку страница будет обновляться каждый раз, когда кто-то сохраняет заметку...
Почему бы вам не отправить данные POST через AJAX?
Вам нужно написать функцию JavaScript, которую вы сможете вызывать при нажатии на кнопку.
Вы можете сделать что-то простое, например...
Notes.js
function saveNoteAjax() {
return $.ajax({
type: 'POST',
url: 'your route to the function notes function in views.py',
data: {note: document.getElementById('yourNotesInput_ID').value}
})
}
async function SaveLoadNote(){
await saveNoteAjax()
*use another Ajax call to get the new notes from the DB*
*insert some function to refresh the notes on-screen*
}
views.py
def notes(request):
if request.is_ajax():
note = request.POST['note']
*insert your code for updating your DB table*
return HttpResponse('')
Если вам не нужен AJAX, вы можете превратить всю таблицу в Django model formset. Каждое поле для заметок будет элементом ввода. Чтобы начать, {{form.notes}}
. Когда все заработает, вы можете изменить свой html для рендеринга и стилизовать поле формы так, как вам захочется). Доступ к другим нередактируемым полям будет осуществляться с помощью {{form.instance.fieldname}}
Разница будет заключаться в том, что пользователь должен будет явно обновить информацию после внесения изменений, т.е. вам нужна кнопка Update для отправки изменений
Формсеты и модельные наборы форм выглядят сложными для начала, но на самом деле это не так, как только вы сделаете несколько наборов форм!