Django:如何获取列表相关的ForeignKey记录?

时间:2017-10-19 16:43:09

标签: python django django-models foreign-keys django-orm

我正在使用Django v1.11。这里有两个型号:

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 个答案:

答案 0 :(得分:2)

使用您已有的直通模型向Task添加多对多字段:

class Task(models.Model):
    users = models.ManyToManyField(settings.AUTH_USER_MODEL, through='TaskUser')

并在迭代时使用.all

{% for user in task.users.all %}
    {{ user.id }}
{% endfor %}

(注意,您应该从related_name='+'字段中移除TaskUser.user。)