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_relatedprefetch_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:如何从与用户相关的子查询集中获取不同的父列表?

Django:如何创建类别字段/下拉菜单?

Django - 如何以有效的方式获取最新的相关模型,我可以在模板上进行迭代?

获取所有相关的 Django 模型对象

如何使用 django 为我的案例设计模型?

Django:管理员中的 AJAX/jQuery