Django: Есть ли способ реструктурировать фрейм данных с помощью ввода от пользователя в шаблоне и перерисовать его в представления? - PullRequest
0 голосов
/ 31 октября 2019

Я группирую некоторые данные в DataFrame с pandas, а затем отображаю их в моем TemplateView. Я хочу указать диапазон дат в своем шаблоне, а затем повторно отфильтровать отфильтрованные данные на моей странице.

My model columns:   
name
date_added
task
time_spent

date_added указывает дату, когда пользователь с идентификатором name отправил свои task и time_spent время, которое он потратил на задачу

Я группирую name и task, чтобы получить сумму time_spent, поэтому

мои DataFrame столбцы изday 0 до today выглядит следующим образом:

name    task            time_spent
John    programming     2 days 2 hours

мой желаемый фильтрованный DataFrame в this month будет выглядеть так:

name    task            time_spent
John    programming     12 hours

В моем views.py:

class ExamplePageView(TemplateView):
    template_name = 'example.html'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(ExamplePageView, self).get_context_data(**kwargs)

        func_to_group_data() # function that structs the grouped csv
        my_data = pd.read_csv('some_place/data.csv')

        context.update({'df': my_data.values})
        return context

В моем example.html Date_range_picker:

<div id="reportrange">
  <i class="fa fa-calendar"></i>
  <span id='date_summon'></span>
  <i class="fa fa-caret-down"></i>
</div>

В моем test.js код для date_range_picker:

$(function() {

      var start = moment().subtract(29, 'days');
      var end = moment();

      function cb(start, end) {
        $('#reportrange #date_summon').html(start.format('D/M/YYYY') + ' - ' + end.format('D/M/YYYY'));
      }


      $('#reportrange').daterangepicker({
        startDate: start,
        endDate: end,
        ranges: {
          'Today': [moment(), moment()],
          'This month': [moment().startOf('month'),moment().endOf('month')]
        }
      }, cb);

      cb(start, end);

    });

Я пыталсяизвлеките значения start и end, объявив форму в кнопке, хотя это не дает ожидаемых результатов при обновлении страницы. Я думал реализовать метод bs4, но я считаю, что есть лучший и более легкий способ.

...