Pho*_*beB 2 django django-queryset
我想在查询集中包含一个月份数字,其中日期在相关模型中。这是我尝试过的:
OrderItem.objects.all().annotate(order_month=Sum('order__payment_date__month'))[0].__dict__
Join on field 'payment_date' not permitted. Did you misspell 'month' for the lookup type?
Run Code Online (Sandbox Code Playgroud)
然后我试过了
OrderItem.objects.all().extra(select={'order_month': "order__payment_date__month"})
(1054, "Unknown column 'order__payment_date__month' in 'field list'")
OrderItem.objects.all().extra(select={'order_month': "order.payment_date"}).select_related('Order')
(1054, "Unknown column 'order.payment_date' in 'field list'")
Run Code Online (Sandbox Code Playgroud)
但这有效,因此 order.payment_date 没有问题
OrderItem.objects.all().values('id','order__payment_date').select_related('Order')
Run Code Online (Sandbox Code Playgroud)
我在查询集结果中需要它,因为我在 Geraldo 中使用查询集。有谁知道我怎么能得到这个?
答案是在额外的部分中,您需要指定您想要的内容,以便 MySQL 理解它。就我而言,在模型名称前添加应用程序。在这种情况下,web_order.payment_date。这有效:
OrderItem.objects.all().extra(select={'order_month': "MONTH(web_order.payment_date)"}).select_related('order')[0].__dict__
{'product_id': None, 'order_id': 1L, 'price': Decimal("1.00"), 'order_month': 7L, 'id': 1L}
Run Code Online (Sandbox Code Playgroud)
在 Django 1.10+ 中,您可以使用该ExtractMonth功能。
from django.db.models.functions import ExtractMonth
OrderItem.objects.all().annotate(order_month=ExtractMonth('order__payment_date'))
Run Code Online (Sandbox Code Playgroud)