Django模型中对象的总数

时间:2017-06-21 16:49:59

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

使用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,还是在视图中使用某种类型的查询集。

3 个答案:

答案 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> 被评估的情况下才会这样做。

决定放入视图以及如何处理模板过滤器/无参数方法更多的是风格问题而不是硬性规则。在使用视图时,通常是正确的,这里很简单,我可能只是在模板中执行它。