在用户列表中为每个用户从一张表显示多条记录

时间:2019-01-23 02:07:22

标签: django django-models django-templates django-views

我有一个用户列表。

每个用户都有一个合同历史记录,所有合同都存储在同一表中。

每个用户都有1个当前处于活动状态的合同。

我正在尝试在用户列表中显示当前有效合同的一些详细信息。

型号:

class Contract(models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    contract_start = models.DateField(null = True, blank = True)
    contract_end = models.DateField(null = True, blank = True)

查看:

def get(self, request):
    users = User.objects.all()
    date_today = timezone.now().date()
    active_contract = Contract.objects.filter(contract_start__lte=date_today, contract_end__gte=date_today)
    return render(request, 'user/list.html', {
        'users': users,
        'active_contract': active_contract,
    })

模板:

{% for user in users %}
  <tr>
    <td>{{ user.last_name }}</td>
    <td>{{ user.first_name }}</td>
    <td>{{ user.employee.location }}</td>
    <td>{{    ??    }}</td>
  </tr>
{% endfor %}

在另一个有一个用户的视图中,我可以将user_id = id添加到过滤器中,并且可以显示所需的详细信息。我似乎无法在我的用户列表中使用它。

1 个答案:

答案 0 :(得分:0)

如果您确定每个用户都有一份有效合同,则可以

def get(self, request):
    date_today = timezone.now().date()
    active_contracts = Contract.objects.select_related('user').filter(contract_start__lte=date_today, contract_end__gte=date_today)
    return render(request, 'user/list.html', {
        'active_contracts': active_contracts,
    })

模板

{% for contact in active_contracts %}
  <tr>
    <td>{{ contact.user.last_name }}</td>
    <td>{{ contact.user.first_name }}</td>
    <td>{{ contact.user.employee.location }}</td>
    <td>{{ contact.contract_start }}</td>
  </tr>
{% endfor %}