django用户字段在模板中显示为空

时间:2019-07-09 02:58:25

标签: django django-templates

无法访问模板中的字段

model.py:

class DSS(models.Model):
    title = models.CharField(max_length=255, null=True, blank=True, verbose_name='عنوان')
    usr = models.ForeignKey(User, related_name='owner', verbose_name='کاربر')

view.py:

def state(request):
    result = DSS.objects.values('usr').order_by('usr').annotate(count=Count('usr'))
    context = {'result': result,}
    return render(request, 'state.html', context)

我的模板:

 <tr>
    <td>{{ item.usr }}{{ item.usr.get_username}}{{ item.usr.username}}{{ item.usr.get_full_name}}</td>
    <td>{% with item.usr.get_username as usrnm %}
        {{ item.usr.get_full_name|default:usrnm }}
        {% endwith %}</td>
    <td>{{ item.usr.first_name }} {{ item.usr.lastname }}</td>
    <td>{{ item.owner.first_name }}</td>
    <td>{{ item.count }}</td>
</tr>

{{item.count}}运行良好,而{{item.usr}}仅显示用户ID,但我需要显示用户名,但是这些尝试均无效!

3 个答案:

答案 0 :(得分:2)

尝试发送实际的查询集而不是values()。为了减少数据库命中率,可以使用select_related()。例如:

result = DSS.objects.select_related('usr').order_by('usr')

.annotate(count=Count('usr'))也将无法正常工作。对于每个查询集,它将显示1。相反,请尝试汇总。

def state(request):
    result = DSS.objects.select_related('usr').order_by('usr')
    user_count = result.aggregate(u_count=Count('usr')).get('u_count')
    context = {'result': result, 'user_count': user_count}
    return render(request, 'state.html', context)

并在模板中呈现它:

{{ user_count }}

答案 1 :(得分:1)

代替

result = DSS.objects.values('usr').order_by('usr').annotate(count=Count('usr'))

尝试

result = DSS.objects.values('usr', 'usr__username').order_by('usr').annotate(count=Count('usr'))

以html

{{ item.usr__username }}

答案 2 :(得分:0)

尝试在用户模型中添加__str__方法。

def __str__(self):
        return self.first_name + " " + self.last_name
        # use the fields you have in your user model, mine was first_name and last_name