Django模型-使用两个外键值

时间:2019-03-06 13:19:53

标签: django django-models django-templates

我在django中是个新手,所以我的问题可能很基本,但是如果您能帮助我,那还是很棒的。除了最简单的方法外,我什至不知道该怎么解决这个问题。 我有这样的模型:

afterClosed()

现在我想担任给定项目的所有角色:

mergeMap

并在模板上将所有角色显示为具有作业名称(来自作业模型)和用户名(来自用户模型)的行,如下所示:

class Role(models.Model):
    id = models.AutoField(primary_key=True)
    job = models.ForeignKey('Job', on_delete=models.CASCADE)
    project = models.ForeignKey('Project', on_delete=models.CASCADE)
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)

1 个答案:

答案 0 :(得分:3)

使用reverse relationship

{% for role in current_project.role_set.all %}
<tr>
  <td>{{ role.job.name }}</td>
  <td>{{ role.user.username }}</td>
</tr>
{% endfor %}

编辑:

  

有没有办法在模型或视图中做到这一点(不使用其他变量),例如prefetch_related?因为模板中的方法会生成多个重复的SQL查询。

IIRC,您可以在视图中的prefetch_related查询集上应用select_relatedProject,即

qs = Project.objects.prefetch_related(....).select_related(...)
current_project = qs.get(pk=...)

但这是从内存中提取的,我现在没有时间再次检查此内容...