Сохранение и загрузка состояния таблицы Datatable с помощью Django
Кто-нибудь использовал библиотеку Datatable.net - https://datatables.net/
Я хочу сохранить состояние таблицы в базе данных, например, видимость и порядок колонок. С помощью stateSaveCallback я получаю все это в JSON. Я написал API, который сохраняет эти данные в SQL-таблице.
При перезагрузке я хочу выводить таблицу с сохраненными изменениями состояния.
var tableSumm = $('#summary_table').DataTable({
stateSave: true,
stateSaveCallback: function (settings, data) {
console.log(this.attr("id"))
console.log('SAVE', data);
var URL = window.location.origin + '/api/state/' + this.attr("id") + '/'
fetch(URL, {
method: 'POST',
dataType: 'json',
headers:{
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest', //Necessary to work with request.is_ajax()
'X-CSRFToken': csrftoken
},
body:JSON.stringify(data),
success: function () {}
})
},
stateLoadCallback: function (settings, callback) {
console.log('Load', data);
var URL = window.location.origin + '/api/state/' + this.attr("id") + '/'
fetch(URL, {
headers:{
'Accept': 'application/json',
'X-Requested-With': 'XMLHttpRequest', //Necessary to work with request.is_ajax()
}
})
.then(response => {
return response.json() //Convert response to JSON
})
},}
Для этого существует 2 метода обратного вызова, stateSaveCallback и stateLoadCallback. Я попытался реализовать их в своем проекте, но не смог добиться успеха. Я хочу, чтобы состояние сохранялось в SQL-сервере.
Я написал API, который использует saveStateCallback и сохраняет данные в моей модели. Но я не могу загрузить их при обновлении страницы.
@api_view(['GET', 'POST', 'DELETE'])
def stateListDetail(request, table_name):
if request.method == 'GET':
username = request.user
if username:
user = User.objects.get(username=username)
queryset = TableState.objects.filter(user=user, tablename=table_name)
else:
return Response(status=status.HTTP_404_NOT_FOUND)
serializer = TableStateSerializer(queryset, many=True)
return Response(serializer.data)
elif request.method == 'POST':
tablestate = TableState.objects.filter(tablename = table_name).first()
if tablestate:
print('Updating Table state')
# print(request.data)
tablestate.user = request.user
tablestate.tablename = table_name
tablestate.columnsdata = request.data,
tablestate.save()
else:
print('Creating New Table state')
state = TableState(
user = request.user,
tablename = table_name,
columnsdata = request.data,
)
state.save()
return Response(status=status.HTTP_201_CREATED)
elif request.method == 'DELETE':
state = TableState.objects.get(tablename=table_name)
state.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
Если кто-то уже делал это или у кого-то есть пример кода, на который я могу сослаться, пожалуйста, поделитесь.
Модель стола:
class TableState(models.Model):
"""
A state save belonging to a User.
"""
# TableStateSave will be deleted, if user is deleted
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
tablename = models.CharField('TableName', max_length=50, null=True)
columnsdata = models.CharField('ColumnsData', max_length=5000, null=True)
def __str__(self):
return self.tablename
class Meta:
'''The ForeignKey i.e. user and tablename name must be unique'''
unique_together = ('user', 'tablename')