首页 > 解决方案 > 在 HttpResponse 结果中列出外键对象字段

问题描述

我提前道歉,因为我确信这个问题已经得到了完整的回答,但我一定错过了一个关键部分。

我正在尝试在现有结果中列出报告的 created_by 用户的 first_name 字段。据我所知,我已经正确设置了所有内容,但只有 Report 对象的属性正在呈现。

models.py中,我有一个带有 FK 到“用户”对象的对象“报告”:

created_by = models.ForeignKey(User, related_name='users', on_delete=models.CASCADE)

views.py中,我正在使用以下方法创建“报告”对象:

reports = Report.objects.order_by('-created_on').select_related('created_by').all()

在 django shell 中运行它会显示我期望的 SQL,包括从 auth_user.first_name 中提取的 first_name 字段:

>>> print(Report.objects.order_by('-created_on').select_related('created_by').all().query)
SELECT "report"."id", "report"."name", "report"."created_on", "report"."created_by_id", "report"."data_source", "report"."report_date", "report"."case_id", "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "report" INNER JOIN "auth_user" ON ("report"."created_by_id" = "auth_user"."id") ORDER BY "report"."created_on" DESC

但是,我必须在我的 HTML 中做错了什么:

{% for report in reports %}
<tr>
<td>{{ report.name }}</td>
<td>{{ report.users.first_name }}</td>
<td>{{ report.report_date }}</td>
</tr>
{% endfor %}

我尝试了几乎所有我能想到的 report.*.first_name 变体,但在每种情况下,只有 report.name 和 report.report_date 值通过。我一定遗漏了一些东西,因为即使当我通过 django shell 打印 SQL 时,它也会显示 auth_user 字段,如果我只是从该命令中请求 .values() ,那么只会返回报告字段。

标签: pythondjango

解决方案


推荐阅读