使用Django~ = 1.11和Python 3.6
我是初学者!我在网上找到的每个答案都比我正在寻找的答案更先进。
这是我的模特:
class Byte(models.Model):
text = models.CharField(max_length=30)
def __str__(self):
return self.text
以下是我的观点:
def byte_list(request):
bytes = Byte.objects.order_by('text')
return render(request, 'cloudapp/byte_list.html', {'bytes': bytes})
这是我的模板:
{% block content %}
<div class="total">
<h2>Total number of words and phrases entered: {{ byte.count }}</h2>
</div>
<hr>
{% for byte in bytes %}
<div class="byte">
<h2>{{ byte.text }}</h2>
</div>
{% endfor %}
{% endblock %}
这允许创建&#34; Byte&#34; / admin中的对象,只有一个字段 - 一个小文本字段。现在,模板只显示所有创建对象的列表。
问题/问题:我想显示为字节模型创建的对象的总数/数量。在模板中,我有一个标记{{byte.count}}来显示它。
我尝试过使用count()和Aggregation,但不知道如何将它们用于我的模型/视图/模板。我正在寻找最简单和最新的方法来实现这一点,无论是在模型中使用方法还是@property,还是在视图中使用某种类型的查询集。
答案 0 :(得分:2)
def byte_list(request):
byte= Byte.objects.count()
bytes = Byte.objects.order_by('text')
return render(request, 'cloudapp/byte_list.html', {'bytes': bytes,'byte':byte})
在模板中
{{ byte }}
答案 1 :(得分:2)
您有几个不同的选择......获得我见过的模型实例总数的最常见方法是:
tsk.UniqueID
或者,无需运行完整查询:
my_total = len(Byte.objects.filter())
这是指向1.11的资源文档的链接:https://docs.djangoproject.com/en/1.11/topics/db/aggregation/#cheat-sheet
答案 2 :(得分:1)
Exprator的答案没有错,但另一种方法是使用内置的<HashRouter>
<div>
<Switch>
<Route path="/" component={ShopLogin} />
<Route exact path="/shopper" component={Shopper} />
<Route path="/shopperlogin" component={ShopLogin} />
</Switch>
</div>
</HashRouter>
模板过滤器:
length
如果您不打算迭代<h2>Total number of words and phrases entered: {{ bytes|length }}</h2>
查询集,也可以直接在模板中调用bytes
:
count
但是,这会强制进行第二次数据库查询,所以只有在不导致<h2>Total number of words and phrases entered: {{ bytes.count }}</h2>
被评估的情况下才会这样做。
决定放入视图以及如何处理模板过滤器/无参数方法更多的是风格问题而不是硬性规则。在使用视图时,通常是正确的,这里很简单,我可能只是在模板中执行它。