You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按createdAt获取Ticket模型的每条最后记录并输出指定JSON格式?

解决方案

1. 关联字段说明

目标JSON中的部分字段未在提供的Ticket模型中定义,需先明确关联模型的对应字段:

  • itineraire(路线):推测来自Bus模型的字段(如route)
  • Driver(司机):推测来自User模型的字段(如full_name)
  • vente-par-cash(现金销售额)、pu(单价):推测为Ticket模型的字段(需确保模型中已定义,如cash_sales、unit_price)

2. 查询每日最新记录

通过Django ORM先按日期分组,获取每个日期的最新createdAt时间,再关联回Ticket表拿到对应记录:

from django.db.models import Max
from django.utils import timezone
from datetime import timedelta

# 定义今日、昨日日期
today = timezone.now().date()
yesterday = today - timedelta(days=1)

# 分组获取每个日期的最新创建时间
latest_date_entries = Ticket.objects.values('createdAt__date').annotate(latest_created=Max('createdAt'))

# 筛选出对应最新时间的Ticket记录,预加载关联模型提升性能
latest_tickets = Ticket.objects.filter(
    createdAt__in=[entry['latest_created'] for entry in latest_date_entries]
).select_related('user', 'bus', 'PDA')

3. 格式化并输出目标JSON

将查询结果按today、yesterday分组,转换为指定结构的JSON:

import json

result = {"today": [], "yesterday": []}

for ticket in latest_tickets:
    ticket_date = ticket.createdAt.strftime("%d/%m/%Y")
    # 构建单条记录的字典结构
    item = {
        "itineraire": ticket.bus.route if ticket.bus else "",
        "PDA": ticket.PDA.name if ticket.PDA else "",
        "Bus": ticket.bus.code if ticket.bus else "",
        "Driver": ticket.user.full_name if ticket.user else "",
        "date": ticket_date,
        "vente-par-cash": str(ticket.cash_sales) if hasattr(ticket, 'cash_sales') else "0",
        "pu": str(ticket.unit_price) if hasattr(ticket, 'unit_price') else "0"
    }
    # 按日期分组
    if ticket.createdAt.date() == today:
        result["today"].append(item)
    elif ticket.createdAt.date() == yesterday:
        result["yesterday"].append(item)

# 输出格式化后的JSON
print(json.dumps(result, indent=4, ensure_ascii=False))

4. 注意事项

  • 若关联模型的字段名与假设不同,需自行调整代码中的字段引用
  • 若Ticket模型未定义cash_sales、unit_price字段,需补充字段或替换为实际存在的字段
  • 如需支持更多日期分组,可扩展逻辑动态生成日期键

内容的提问来源于stack exchange,提问作者David Tship

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:12:53