Обновление таблицы при каждом изменении моей базы данных [HTMX][Dajngo-tables2]
Я хочу обновлять таблицу каждый раз, когда моя база данных изменяется, без обновления. Также я хочу сохранить параметры карьеры из поиска, когда происходит обновление
До сих пор я использовал hx-get для получения моей таблицы из другого шаблона и представления для получения обновленной таблицы.
Однако я не знаю, с чего начать, чтобы инициировать обновление при изменении базы данных
Views.py
def display_view(request):
myFilter = ParticipantFilter(request.GET, queryset=Participant.objects.all())
table = ParticipantTable(myFilter.qs)
table.paginate(page=request.GET.get("page", 1), per_page=10)
return render(request, 'display.html', {'table': table,'myFilter': myFilter})
def data_only_view(request):
myFilter = ParticipantFilter(request.GET, queryset=Participant.objects.all())
table = ParticipantTable(myFilter.qs)
table.paginate(page=request.GET.get("page", 1), per_page=10)
return render(request, 'updatedDisplay.html', {'table': table})
display.html
{% extends "base.html" %}
{% block content %}
<form method="get">
{{ myFilter.form }}
<button type="submit">Search</button>
</form>
<div id="table-results" hx-get="/updatedDisplay" hx-include = "[name='first_name']">
{% load render_table from django_tables2 %}
<table class="table">
{% render_table table %}
</table>
{% endblock %}
</div>
updateDisplay.html
{% load render_table from django_tables2 %}
<table class="table">
{% render_table table %}
</table>
Без django channels вы можете использовать только pooling. Я вижу, что вы использовали hx-include для ввода с именем 'first_name', я полагаю, что вы можете включить всю форму. Кроме того, вы можете указать вашей форме сделать htmx запрос вместо перезагрузки страницы:
<form hx-get="/updatedDisplay" id="my_form" hx-target="#table-results">
{{ myFilter.form }}
<button type="submit">Search</button>
</form>
<div id="table-results" hx-get="/updatedDisplay" hx-include="#my_form" hx-trigger="every 5s">
#innerHTML
</div>
Таким образом, ваша таблица будет обновляться каждые 5 секунд.