Skip to main content
 首页 » 编程设计

python之使用 Django 查询集从相关模型中选择所有列

2024年10月24日40wuhuacong

我有一个 Django 应用程序,我希望从三个模型中选择每一列。

Project 
| - Employee 
| - Task 

Employee 和 Task 通过 ForeignKey 字段与 Project 相关。

我能够使用原始方法获取我正在寻找的数据:

SELECT * 
FROM "Project" 
LEFT OUTER JOIN "Employee" ON "Employee"."project_id" = "Project"."id" 
LEFT OUTER JOIN "Task" ON "Task"."project_id" = "Project"."id"; 

但是,在取回数据后,我希望使用 django_pandas,因为在将数据作为 csv 返回之前需要进行一些数字处理。将 RawQuerySet 加载到 pandas 中并不是开箱即用的。

我需要选择 >100 列,将所有列手动输入 Project.objects.values( ... ) 非常困惑。如何使用 Django 的 QuerySet API 从相关模型中选择所有列?

请您参考如下方法:

你可以这样做:

projects = Project.objects.prefetch_related('employee_set', 'task_set').all() 

对于相关字段(已经预取):

employees_on_projects = [project.employee_set.values() for project in projects] 
tasks_in_projects = [project.task_set.values() for project in projects] 

您可以通过执行以下操作让所有员工和任务与各自的项目相关联:

data = zip(projects.values(), employees_on_projects, tasks_in_projects) 

这应该适用于您的数据框:

import pandas as pd 
df = pd.DataFrame.from_records(data)