Как мне получить результат (использовать для l oop) через django -фильтр? - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь использовать для l oop результаты, полученные с помощью фильтров, примененных с помощью Django -фильтров. Но я остаюсь с сообщением "У объекта 'str' нет атрибута 'total_cost'". И когда я печатаю контекст в приведенном ниже коде, я получаю следующую команду: dict

{
    'paginator': None, 
    'page_obj': None, 
    'is_paginated': False, 
    'object_list': <QuerySet [<Po: Po object (8)>, <Po: Po object (7)>, <Po: Po object (9)>, <Po: Po object (2)>, <Po: Po object (4)>, <Po: Po object (6)>, <Po: Po object (1)>]>, 'po_list': <QuerySet [<Po: Po object (8)>, <Po: Po object (7)>, <Po: Po object (9)>, <Po: Po object (2)>, <Po: Po object (4)>, <Po: Po object (6)>, <Po: Po object (1)>]>, 
    'view': <po.views.IndexView object at 0x7f6353867be0>, 
    'filter': <po.filters.PoFilter object at 0x7f63538879b0>
}
paginator

Po - это моя модель, и она содержит поле total_cost, которое мне нужно пройти через цикл.

На мой взгляд:

class IndexView(ListView):
model = Po
template_name = 'poList.html'

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['filter'] = PoFilter(self.request.GET, queryset=self.get_queryset().order_by('processed'))
    print(context)
    for item in context:
        print(item)
        cost = 0
        cost = cost + item.total_cost
        print(cost)
    return context

В моем filters.py:

class PoFilter(django_filters.FilterSet):
    created_at = DateExactRangeField(label='Created Date Range',
                                     widget=django_filters.widgets.RangeWidget(attrs={'placeholder': 'yyyy/mm/dd'}))
    po_number = django_filters.CharFilter(lookup_expr='icontains', label='Po Number', widget=TextInput(attrs={'placeholder': 'Po_Number'}))

    class Meta:
        model = Po
        fields = {
            'created_at',
            'po_number',
            'approved_by',
            'processed'
        }

Пожалуйста, поделитесь, если вы можете решить эту проблему. Заранее спасибо !!!

...