扁平化Django中共享相同名称的多个查询集



我有多个查询集,看起来像:

NAME1 | VALUE_FROM_COLUMN_1
NAME1 | VALUE_FROM_COLUMN_2
NAME1 | VALUE_FROM_COLUMN_3

除了使用list(chain(q1, q2, q3))函数,我如何使这个设计扁平化呢?因为它是这样显示的:

NAME1 | VALUE_FROM_COLUMN_1  |                      |
NAME1 |                      | VALUE_FROM_COLUMN_2  |
NAME1 |                      |                      | VALUE_FROM_COLUMN_3

我想要这个:

NAME1 | VALUE_FROM_COLUMN_1  | VALUE_FROM_COLUMN_2  | VALUE_FROM_COLUMN_3

正如@Willem Van Onsem建议的那样,我试图在下面详细说明:

list1 = OrderElement.objects.filter(ordel_order_fk_id__in=Order.objects.filter(ord_status=2, ord_data_real__lte=datetime.now() + timedelta(days=7)).
values_list('ord_id', flat=True)).values('ordel_name').annotate(total1=Sum('ordel_ilosc')).order_by()
list2 = OrderElement.objects.filter(ordel_order_fk_id__in=Order.objects.filter(ord_status=2, ord_data_real__lte=datetime.now() + timedelta(days=14), ord_data_real__gte=datetime.now() + timedelta(days=7)).
values_list('ord_id', flat=True)).values('ordel_name').annotate(total2=Sum('ordel_ilosc')).order_by()

基本上我通过他们父母的日期来过滤位置。输出如下:

list1:
ordel_name: OrderElementName1, total1: 50
...
list2:
ordel_name: OrderElementName1, total2: 100
...

模型:

class Order(models.Model):
ord_id = models.AutoField(unique=True, primary_key=True)
ord_data_real = models.DateField()
class OrderElement(models.Model):
ordel_id = models.AutoField(unique=True, primary_key=True)
ordel_order_fk = models.ForeignKey(Order, on_delete=models.CASCADE)
ordel_name = models.CharField(max_length=100, unique=False)
ordel_qty = models.IntegerField(unique=False)

我们可以使用单个查询集:

from django.db.models import Q, Sum
data = (
OrderElement.objects.filter(
ordel_order_fk__ord_status=2,
ordel_order_fk__ord_data_real__lte=datetime.now() + timedelta(days=14),
)
.values('ordel_nazwa')
.annotate(
total1=Sum(
'ordel_ilosc',
filter=Q(
ordel_order_fk__ord_data_real__lte=datetime.now()
+ timedelta(days=7)
),
),
total2=Sum('ordel_ilosc'),
)
.order_by('ordel_nazwa')
)

这将创建以ordel_nazwa为键的字典,以及两个额外的键total1total2,分别为前7天和前14天的ordel_ilosc的数目。

相关内容

  • 没有找到相关文章

最新更新