Сохранение и загрузка состояния таблицы 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')
Вернуться на верх