print(str(high_margin.query))
De esta manera puede obtener lo que un queryset
produce y juega porque es una consulta perezosa como lo indica respuesta aquí.
Así que obtuve la consulta SQL esperada simplemente agregando expiry_date
en los values
, que produce un grupo por nombre, fecha de caducidad según lo establecido por docs .
El código cambia como:
high_margin = StoreInvoiceBreakup.objects \
.filter(store_invoice__store_id=store_id) \
.values('product_name', 'expiry_date') \
.annotate(gross_margin_sum=Sum('gross_margin')) \
.order_by('gross_margin_sum') \
.distinct()[:int(sell_range)]
*no estoy seguro si es correcto