Python 在get_queryset中添加新的上下文变量
我有一个页面,显示将显示每月收入,根据用户选择的月份 在HTML中,有一个包含所有可能输入的函数。现在在我的Python 在get_queryset中添加新的上下文变量,python,django,Python,Django,我有一个页面,显示将显示每月收入,根据用户选择的月份 在HTML中,有一个包含所有可能输入的函数。现在在我的 I'm returning a new variable for use in the template, **not a queryset**. I just want to put `{{ revenue }}` in the template. 我已经读到,我不需要发送post,只有通过get我才能做到这一点。因此,我已设置此表单以捕获所选月份,但我得到: TypeError a
I'm returning a new variable for use in the template, **not a queryset**. I just want to put `{{ revenue }}` in the template.
我已经读到,我不需要发送post
,只有通过get
我才能做到这一点。因此,我已设置此表单以捕获所选月份,但我得到:
TypeError at /ordenes/ingresos
unhashable type: 'slice'
如何在get\u queryset方法中设置上下文?
视图.py
class OrdersListView(ListView):
model = Order
template_name = "order/revenue.html"
paginate_by = 10
def get_queryset(self):
filter_month = self.request.GET.get('filtromes', '0')
order = self.request.GET.get('orderby', 'created')
context = {}
if filter_month == "0":
paid_orders = Order.objects.filter(status = 'recibido_pagado')
revenue = 0
for order in paid_orders:
revenue += order.total - order.shipping_cost
context['revenue'] = revenue
return context
else:
paid_orders = Order.objects.filter(created__month=filter_month).filter(status = 'recibido_pagado')
#orders_shipping = Order.objects.filter(created__month=9).filter(status = 'recibido_pagado')
revenue = 0
for order in paid_orders:
revenue += order.total - order.shipping_cost
context['revenue'] = revenue
return context
def get_context_data(self, **kwargs):
context = super(OrdersListView, self).get_context_data(**kwargs)
#filter_month = self.request.GET.get('filtro_mes', '0')
context['filtromes'] = self.request.GET.get('filtromes', '0')
context['orderby'] = self.request.GET.get('orderby', 'created')
context['category'] = "catalogo"
return context
HTML:
<!--### Filter ###-->
<div class="row margin-top5 margin-bottom5 ">
<form method="get" action="{% url 'order:ingresos' %}">
<div class="input-group">
<div class="input-group-prepend">
<label class="input-group-text" for="inputGroupSelect01">Mes</label>
</div>
<select class="custom-select" searchable="Search here.." value={{filtromes}} name="filtromes">
<option value="0" disabled>Elegir mes</option>
<option value="1">Enero</option>
<option value="2">Febrero</option>
<option value="3">Marzo</option>
<option value="4">Abril</option>
<option value="5">Mayo</option>
<option value="6">Junio</option>
<option value="7">Julio</option>
<option value="8">Agosto</option>
<option value="9">Setiembre</option>
<option value="10">Octubre</option>
<option value="11">Noviembre</option>
<option value="12">Diciembre</option>
</select>
<div class="input-group-append">
<input class="btn btn-outline-secondary" type="submit" name="buscar" value="Buscar" style="margin-bottom: 0px;" />
</div>
</div>
</form>
</div>
<!--### Filter ###-->
<h1> {{ revenue }}</h1>
Mes
埃勒吉尔mes
埃内罗
费夫雷罗
马尔佐
阿布里尔
梅奥
朱尼奥
胡里奥
阿戈斯托
刚毛
十月
中篇小说
双伞
{{收入}
您可以将对象列表
拉入获取上下文数据
,而不是试图强制上下文进入获取查询集
:
def get_queryset(self):
filter_month = self.request.GET.get('filtromes', '0')
if filter_month == "0":
return Order.objects.filter(status = 'recibido_pagado')
else:
return (Order.objects
.filter(created__month=filter_month, status = 'recibido_pagado'))
def get_context_data(self, **kwargs):
context = super(OrdersListView, self).get_context_data(**kwargs)
qs = kwargs.pop('object_list', self.object_list)
order = self.request.GET.get('orderby', 'created')
context = {}
revenue = 0
for order in qs:
revenue += order.total - order.shipping_cost
context['revenue'] = revenue
context['filtromes'] = self.request.GET.get('filtromes', '0')
context['orderby'] = self.request.GET.get('orderby', 'created')
context['category'] = "catalogo"
return context
也可以考虑使用<代码>注释< /COD>,<代码>和>代码>和/或<代码>聚合< /代码>计算<代码>收入
Ty,它起作用。但是,我现在遇到了这个问题,它与视图没有直接关系,而是与模板有直接关系:如何在表单中保留用户选择的最后一个选项?默认为“Enero”,value=“1”(用户选择“Setiembre”,收入根据“Setiembre”计算,但选择设置为“Enero”)?还将使用注释
、总和
或合计来计算收入
,并举例说明,有什么好处?@OmarGonzales,如果希望值保持不变,请转发self.request.GET/POST中的值。请参阅: