Django:如何获取列表相关的 ForeignKey 记录?
Posted
技术标签:
【中文标题】Django:如何获取列表相关的 ForeignKey 记录?【英文标题】:Django: how to get list related ForeignKey records? 【发布时间】:2018-03-31 18:52:52 【问题描述】:我正在使用 Django v1.11。这里有 2 个模型:
class Task(models.Model):
title = models.CharField()
class TaskUser(models.Model):
task = models.ForeignKey(Task, related_name='task_user')
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+')
所以,我想获取任务列表并在一列中打印与此任务相关的用户列表。怎么做?这个问题尝试了很多:select_related
,prefetch_related('task_user')
等等.. 但没有任何效果。在某些情况下没有sql错误,但会打印task.User.None
tasks = Task.objects.all()
视图必须是:
<table>
<tr>
<td>Title</td>
<td>Users</td>
</tr>
% for task in tasks %
<tr>
<td> task.title </td>
<td>
% for user in task.users %
user.id
% endfor %
</td>
</tr>
% endfor %
</table>
【问题讨论】:
【参考方案1】:使用您已有的直通模型向 Task 添加多对多字段:
class Task(models.Model):
users = models.ManyToManyField(settings.AUTH_USER_MODEL, through='TaskUser')
并在迭代时使用.all
:
% for user in task.users.all %
user.id
% endfor %
(注意,您应该从TaskUser.user
字段中删除related_name='+'
。)
【讨论】:
以上是关于Django:如何获取列表相关的 ForeignKey 记录?的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何从与用户相关的子查询集中获取不同的父列表?