Обновление столбцов таблицы DataTable после получения данных с сервера
Я новичок в DataTables js, мне нужно решение для моей проблемы. У меня есть приложение Django, где я использую DataTables с обработкой на стороне сервера, шаблон таблицы динамический для всех моделей, которые у меня есть, я просто передаю columns (список dicts с data
, name
и title
) в контексте шаблона, довольно просто...
def my_page_view(request):
columns = generate_datatables_columns("MyModel")
return render(
request,
"my_page.html",
{"columns": columns}
)
<script>
$(document).ready(function() {
var columns = [];
{% for col in columns %}
var jsObject = {
{% for key, value in col.items %}
"{{ key }}": "{{ value }}",
{% endfor %}
};
columns.push(jsObject);
{% endfor %}
var table = $('#my-table').DataTable({
"processing": true,
"serverSide": true,
"ajax": {
"url": "/my/url",
"type": "GET",
},
"columns": columns,
});
});
</script>
<table id="my-table" class="display" width="100%">
<thead>
<tr>
{% for column in columns %}
<th id="dt_col_{{column.data}}">{{ column.name }}</th>
{% endfor %}
</tr>
</thead>
</table>
После этого мне нужно было внести некоторые изменения в столбцы, но в зависимости от полученных данных, то есть я должен иметь возможность обновлять столбцы внутри определения DataTable после получения данных. Чтобы сделать идею более понятной, следующий код представляет одну из попыток, которую я пробовал, используя ajax.dataSrc
prop:
var table = $('#my-table').DataTable({
"processing": true,
"serverSide": true,
"ajax": {
"url": "/my/url",
"type": "GET",
"dataSrc": function (json) {
var data = json.data;
var newColumns = columns;
// make changes on data and newColumns variables with some conditions...
// here should update the datatable columns with the value of newColumns.
return data;
}
},
"columns": columns,
});
С помощью этого метода я не смог найти способ обновления столбцов, я пробовал и другие способы, такие как использование drawCallback
, или пользовательской функции ajax, но я всегда оказывался в тупике.
Я буду очень благодарен, если кто-нибудь поможет мне с этим.