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

如何连接字段名不同的两个Django模型并返回所有实例?

获取Purchases表中销量前三Menu Items的DataFrame方案

核心思路

利用Django ORM的关联查询与聚合功能,直接通过外键关联Purchase和MenuItem模型,统计销量与销售额后转换为DataFrame,无需手动指定title作为关联条件(外键已自动维护关联关系)。


步骤1:ORM聚合统计销量与销售额

通过annotate实现分组统计,按销量降序取前三:

from django.db.models import Count, Sum
from .models import Purchase, MenuItem

# 分组统计每个菜品的销量、单份价格、总销售额
top_items_query = Purchase.objects.values(
    'menu_item__title',  # 菜品名称
    'menu_item__price'   # 单份价格
).annotate(
    sales_volume=Count('id'),        # 销量(统计Purchase记录数)
    total_sales=Sum('menu_item__price')  # 总销售额
).order_by('-sales_volume')[:3]  # 按销量降序,取前三

步骤2:转换为DataFrame

使用django_pandas的read_frame方法将QuerySet转为DataFrame,可按需重命名列:

from django_pandas.io import read_frame

# 转换QuerySet到DataFrame
top_items_df = read_frame(top_items_query)

# 重命名列名,提升可读性
top_items_df.rename(
    columns={
        'menu_item__title': 'item_name',
        'menu_item__price': 'unit_price',
        'sales_volume': 'sales_volume',
        'total_sales': 'total_sales'
    },
    inplace=True
)

关键说明

你之前尝试手动用title关联两张表是冗余操作——Purchase的menu_item字段是ForeignKey,Django已通过外键ID自动建立了两张表的关联关系,使用双下划线(menu_item__xxx)即可直接访问关联模型的字段,避免了手动关联可能出现的匹配错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:15:41