Как отфильтровать данные по пользовательским входам в фильтре Django? - PullRequest
0 голосов
/ 09 апреля 2019

Я хочу отфильтровать кадр данных, развернутый из модели.

Model.py - это:

class MTD(models.Model):
    RGN = models.CharField(max_length = 60, db_column = 'RGN')
    Channel = models.CharField(max_length = 60, db_column = 'Channel')
    Vertical = models.CharField(max_length = 60, db_column = 'Vertical')
    Brand = models.CharField(max_length = 60, db_column = 'Brand')
    Sales_Value = models.CharField(max_length = 60, db_column = 'Sales Value')
    Month = models.CharField(max_length = 60, db_column = 'Month')

    City = models.CharField(max_length = 60, db_column = 'City')

    objects = models.Manager()
    pdobjects = DataFrameManager()


    def __str__(self):
            field_values = []
            for field in self._meta.get_fields():
                field_values.append(str(getattr(self, field.name, '')))
            return ' '.join(field_values)

Я фильтрую только три столбца из моей модели («ВЕРТИКАЛЬНЫЙ», «КАНАЛ», «ЗНАЧЕНИЕ ПРОДАЖ») и преобразую это в массив данных. Из производного фрейма данных я не могу отфильтровать данные по запросу пользователя. Я публикую код, который я пробовал до сих пор.

Table.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    {% load static %}
    <meta charset="utf-8">
    <title></title>
  </head>
  <body class="hold-transition skin-blue sidebar-mini">
    <h1>Pandas dataframe from MyModel</h1>
    <form method="GET">
      {{ filter.form.as_p }}
      <button type="submit">Search</button>
    </form>

    {{ filter|safe }}
    {{ Table|safe }}

  </body>
</html>

Filter.py

from dash.models import MTD
import django_filters

class UserFilter(django_filters.FilterSet):
    class Meta:
        model = MTD
        fields = ['Vertical', 'Channel', ]

Views.py

from dash.filter import UserFilter


def salebycustomer(request):
    sbc = MTD.pdobjects.values('Vertical', 'Channel','Sales_Value')
    user_filter = UserFilter(request.GET, queryset=sbc)
    sbc_df = sbc.to_dataframe().reset_index(drop=True)#Trying to use filtered model for dataframe
    sbc_df['Sales_Value']=sbc_df['Sales_Value'].astype(float)

    sbc_df1 = pandas.pivot_table(sbc_df,values='Sales_Value', index='Vertical', columns='Channel',aggfunc='sum').rename_axis(None,axis=1).replace(numpy.nan,0)
    sbc_df1.reset_index(inplace=True)

    # sbc_df1.columns = [''.join(col).strip() for col in sbc_df1.columns.values]

    # sbc_df1=sbc_df1.T.to_dict().values()
    template = 'table.html'


    sbc_df2 = sbc_df1.to_html()

    context= {'filter': user_filter,'Table':sbc_df2}

    return render(request, template, context)

Пожалуйста, помогите мне решить эту проблему. Пожалуйста, смотрите этот скриншот

Спасибо

1 Ответ

0 голосов
/ 09 апреля 2019

Знаете ли вы, что при создании user_filter вы не используете его для создания выходных данных в шаблоне или для фильтрации чего-либо в вашем представлении.Обратите особое внимание на этот раздел документации django_filter.Фильтр также используется для генерации вывода (а не только формы).

...