无法访问模板中的字段
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,但我需要显示用户名,但是这些尝试均无效!
答案 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